资源简介
本课程设计的目的是熟悉IP包格式和加深对IP协议的理解。要求编制程序,监控网络,捕获一段时间内网络上的 IP数据包,按IP数据包的源地址统计出该源地址在该时间段内发出的IP包的个数,将其写入日志文件中或用图形表示出来(建议用图形表示出统计结果)

代码片段和文件信息
#include “dialog.h“
#include“NodeList.h“
#include“IPNode.h“
#include“IPMonitor.h“
#include
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
QTextCodec::setCodecForTr(QTextCodec::codecForName(“gb2312“));
setWindowtitle(tr(“IPMonitor by xclee@vip.qq.com“));
QVBoxLayout *vv = new QVBoxLayout(this);
QHBoxLayout *hh = new QHBoxLayout;
timeLabel =new QLabel(tr(“监控时间(ms)“));
timeLineEdit = new QLineEdit;
startPushButton = new QPushButton(tr(“开始捕获“));
hh->addWidget(timeLabel);
hh->addWidget(timeLineEdit);
hh->addWidget(startPushButton);
list = new QTreeWidget;
list->setHeaderLabels(QStringList()< vv->addLayout(hh);
vv->addWidget(list);
connect(startPushButtonSIGNAL(clicked())thisSLOT(updateList()));
//updateList();
}
Dialog::~Dialog()
{
}
void Dialog::updateList()
{
WSADATA wsData;
QTextCodec::setCodecForTr(QTextCodec::codecForName(“gb2312“));
// 初始化Winsock DLL
if (WSAStartup(MAKEWORD(22)&wsData) != 0)
{
qDebug()<<“WSAstartup filed!\n“;
return ;
}
// 创建Raw Socket
SOCKET sock;
if ( (sock = WSASocket(AF_INET SOCK_RAW IPPROTO_IP NULL 0 WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET )
{
qDebug()<< “Create socket failed!“ ;
return ;
}
else
{
qDebug()<<“success\n“;
}
// 设置IP头操作选项,表示用户可以亲自对IP头进行处理
BOOL bFlag = TRUE;
if (setsockopt(sock IPPROTO_IP IP_HDRINCL (char *)&bFlag sizeof(bFlag)) == SOCKET_ERROR)
{
qDebug()<<“Setsockopt failed!“;
return ;
}
// 获取本地主机名
char pHostName[128];
if (gethostname(pHostName 100) == SOCKET_ERROR)
{
qDebug()<<“Gethostname failed!“;
return ;
}
// 通过本地主机名获取本地IP地址
hostent * pHostIP;
if((pHostIP = gethostbyname(pHostName)) == NULL)
{
qDebug()<<“Gethostname failed!“;
return ;
}
// 填充sockaddr_in结构
sockaddr_in addr_in;
addr_in.sin_addr = *(in_addr *)pHostIP->h_addr_list[0]; // 设定IP地址
addr_in.sin_family = AF_INET; // 设定地址类型
addr_in.sin_port = htons(8000); // 设定端口
// 把原始套接字绑定到本机地址上
if(bind(sock(PSOCKADDR)&addr_insizeof(addr_in)) == SOCKET_ERROR)
{
qDebug()<< “Bind failed!“;
return ;
}
// 把网卡设置为混杂模式,以便接收所有的IP包
#define IO_RCVALL _WSAIOW(IOC_VENDOR1)
unsigned long pBufferLen[10];
unsigned long dwBufferInLen = 1;
unsigned long dwBytesReturned = 0;
if ((WSAIoctl(sock IO_RCVALL &dwBufferInLen sizeof(dwBufferInLen) &pBufferLen
sizeof(pBufferLen) &dwBytesReturned NULL NULL)) == SOCKET_ERROR)
{
qDebug()<<“Ioctlsocket failed!“;
return ;
}
// 把socket设置为非阻塞模式
unsigned long dwTemp = 1;
ioctlsocket(sock FIONBIO &dw
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 278894 2009-12-26 18:52 IPMonitor\debug\dialog.o
文件 1959501 2009-12-26 18:53 IPMonitor\debug\IPMonitor.exe
文件 117855 2009-12-25 15:56 IPMonitor\debug\IPNode.o
文件 206147 2009-12-26 18:46 IPMonitor\debug\main.o
文件 2080 2009-12-26 18:48 IPMonitor\debug\moc_dialog.cpp
文件 213992 2009-12-26 18:48 IPMonitor\debug\moc_dialog.o
文件 262745 2009-12-26 18:34 IPMonitor\debug\NodeList.o
文件 24954 2004-06-03 21:08 IPMonitor\debug\WS2_32.LIB
文件 5471 2009-12-26 19:00 IPMonitor\dialog.cpp
文件 530 2009-12-26 18:44 IPMonitor\dialog.h
文件 738 2009-12-25 10:25 IPMonitor\IPMonitor.h
文件 387 2009-12-25 10:38 IPMonitor\IPMonitor.pro
文件 15451 2009-12-26 18:58 IPMonitor\IPMonitor.pro.user
文件 1688 2009-12-25 15:53 IPMonitor\IPNode.cpp
文件 856 2009-12-25 15:52 IPMonitor\IPNode.h
文件 3747 2009-12-25 15:18 IPMonitor\main.cpp
文件 6133 2009-12-25 12:36 IPMonitor\Makefile
文件 5967 2009-12-25 12:36 IPMonitor\Makefile.Debug
文件 6056 2009-12-25 12:36 IPMonitor\Makefile.Release
文件 2710 2009-12-26 18:33 IPMonitor\NodeList.cpp
文件 318 2009-12-25 15:16 IPMonitor\NodeList.h
文件 24954 2004-06-03 21:08 IPMonitor\WS2_32.LIB
目录 0 2009-12-26 18:53 IPMonitor\debug
目录 0 2009-12-25 09:45 IPMonitor\release
目录 0 2009-12-25 16:33 IPMonitor
----------- --------- ---------- ----- ----
3141174 25
- 上一篇:GPS NMEA-0183数据解析代码
- 下一篇:用c编写的模拟时钟修订版
相关资源
- Windows异步套接字网络编程
- MFC网络编程实例
- IpHlpApi.h&IpHlpApi.lib
- SOCKET 网络编程 计算机网络 作业 客户
- VC 截获网络数据包.rar
- windows网络编程__罗莉琴__人民邮电出版
- 网络编程实用教程
- 网络编程socket文件图片等传送
- 网络编程实用教程第二版_各章的源程
- unix网络编程英文版第三版pdf
- Linux网络编程-网络基础-socket编程-高并
- UNIX网络编程卷1(第三版 英文版)
- 原始套接字Sniffer程序
- 用socket网页
- 网络编程实用教程(第二版)-源代码
- PiggyXP完成端口(CompletionPort)详解
- 网络调试助手-全平台
- socket网络编程服务端程序支持多客户
- Windows网络编程(第二版)
- UNIX网络编程 卷1(第三版 英文版)
- 网络课程设计购物网站
- Windows网络编程 带书签 第二版.pdf
- 网络编程实用教程.pdf
- socket网络编程,可以实现聊天系统,
- Linux网络编程+RouterOS_3.0中文教程+Rou
- 网络编程实用教程ppt+源码.rar
- TCP/IP高级编程
- UNIX Network Programming Volume 1 Third Editio
- 简单的聊天程序 网络编程 UDP TCP
- Windows网络编程第二版源码(补充材料
评论
共有 条评论