资源简介
本课程设计的目的是熟悉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编写的模拟时钟修订版
相关资源
- 《TCPIP 网络编程》尹圣雨 源码.zip
- 点对点通信实验报告及程序
- Linux下基于原始套接字的嗅探器
- TCP/IP网络编程(随书代码)
- 使用Socket传输视频
- 使用Socket传输音频
- 网络编程---ftp客户端程序实验报告
- TDP协议 网络编程协议
- 博览网 陈硕网络编程实战 绝对有效
- 华农网络编程socket通信
- Linux网络编程 第2版带详细目录
- 基于数据报套接字的回射程序设计与
- 《unix网络编程》源代码
- linux网络编程聊天工具代码
- linux下C 网络编程
- 防止Socket传递汉字乱码
- TCP IP网络编程 韩尹圣雨.pdf
- 博客文章《完成端口详解》配套代码
- 端口扫描器
- Linux网络编程超级详细笔记
- linux网络编程教学视频
- linux网络编程课程设计
- swing+servlet网络编程
- Linux网络编程(四)——epoll+多线程实
- chat_room.zip
- VC 截获QQ聊天内容和登录密码.rar
- 武汉理工大学TCPIP及网络编程复习重点
- 并发服务器的三种实现模型测试代码
- 中南大学实验:SOCKET通信UDP协议-发送
- Qt实现Winsock网络编程—非阻塞模式下
评论
共有 条评论