• 大小: 101KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-03
  • 语言: 其他
  • 标签:

资源简介

计算机网络高级软件编程技术第5章 IP包流量分析程序源代码

资源截图

代码片段和文件信息

#include “IPMonitor.h“

#define BURRER_SIZE 65535

void main(int argcchar * argv[])
{
// 判断输入的命令行格式是否正确
if (argc != 2)
{
cout << “请按以下格式输入命令行: IPMonitor duration_time“
<< endl << “    其中duration_time为监控时间 单位为秒“< return;
}

WSADATA wsData;

// 初始化Winsock DLL
if (WSAStartup(MAKEWORD(22)&wsData) != 0)
{
cout << “WSAstartup failed!“ << endl;
return;
}

// 创建Raw Socket
SOCKET sock;
if ( (sock = WSASocket(AF_INET SOCK_RAW IPPROTO_IP NULL 0 WSA_FLAG_OVERLAPPED)) 
== INVALID_SOCKET )
{
cout << “Create socket failed!“ << endl;
return;
}

// 设置IP头操作选项,表示用户可以亲自对IP头进行处理
BOOL bFlag = TRUE;
if (setsockopt(sock IPPROTO_IP IP_HDRINCL (char *)&bFlag sizeof(bFlag)) == SOCKET_ERROR)
{
cout << “Setsockopt failed!“ << endl;
return;
}

// 获取本地主机名
char pHostName[128];
if (gethostname(pHostName 100) == SOCKET_ERROR)
{
cout << “Gethostname failed!“ << endl;
return;
}

// 通过本地主机名获取本地IP地址
hostent * pHostIP;
if((pHostIP = gethostbyname(pHostName)) == NULL)
{
cout<<“Gethostbyname 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)
{
cout << “Bind failed!“ << endl;
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)
{
cout<<“Ioctlsocket failed!“< return;
}

// 把socket设置为非阻塞模式
unsigned long dwTemp = 1;
    ioctlsocket(sock FIONBIO &dwTemp);

// 设置接收缓冲区
char pBuffer[BURRER_SIZE];

// 定义存放IP数据包的链表
CNodeList IpList;

double dwDuration = atof(argv[1]); // 输入参数为捕获时间
time_t beg;
time_t end;
time(&beg); // 获得当前系统时间

// 输出本地IP地址
cout << endl;
cout << “本机IP:“ 
 << inet_ntoa(*(in_addr *)&(addr_in.sin_addr.S_un.S_addr)) << endl << endl;
cout << “开始捕获...“ << endl << endl;

while (1)
{
time(&end); // 获得当前系统时间
//如果捕获时间到,就结束捕获
if (end-beg >= dwDuration)
{
break;
}

// 捕获经过网卡的IP数据包
int nPacketSize = recv(sockpBufferBURRER_SIZE0);
if (nPacketSize > 0)
{
IPHEADER * pIpHdr;
// 通过指针把缓冲区中的内容强制转换为IPHEADER数据结构
pIpHdr = (IPHEADER *)pBuffer;
// 判断IP包的源IP地址或目的IP地址是否为本地主机的IP地址
if (pIpHdr->SourceAddress == addr_in.sin_addr.S_un.S_addr 
|| pIpHdr->DestAddress == addr_in.sin_addr.S_un.S_addr) 
{
// 如果源IP地址或目的IP地址是本机IP,则将该IP数据包加入链表
IpList.addNode(pIpHdr->SourceAddress pIpHdr->DestAddress pIpHdr->Protocal);
}
}
}

// 输出统计结果
cout << “IP数据包统计结果: (“ << dwDuration << “ 秒)“

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3370  2007-06-15 08:44  第5章 IP包流量分析程序\IPMonitor\Code\IPMonitor.cpp

     文件       4634  2007-06-15 09:15  第5章 IP包流量分析程序\IPMonitor\Code\IPMonitor.dsp

     文件        541  2006-10-30 08:00  第5章 IP包流量分析程序\IPMonitor\Code\IPMonitor.dsw

     文件        797  2007-06-15 08:54  第5章 IP包流量分析程序\IPMonitor\Code\IPMonitor.h

     文件     140288  2007-06-27 16:23  第5章 IP包流量分析程序\IPMonitor\Code\IPMonitor.ncb

     文件      54784  2007-06-27 16:23  第5章 IP包流量分析程序\IPMonitor\Code\IPMonitor.opt

     文件       1457  2007-06-27 16:22  第5章 IP包流量分析程序\IPMonitor\Code\IPMonitor.plg

     文件       1373  2007-06-15 09:06  第5章 IP包流量分析程序\IPMonitor\Code\IPNode.cpp

     文件       1140  2007-06-15 09:14  第5章 IP包流量分析程序\IPMonitor\Code\IPNode.h

     文件       2022  2007-06-15 09:14  第5章 IP包流量分析程序\IPMonitor\Code\NodeList.cpp

     文件        902  2007-06-15 09:10  第5章 IP包流量分析程序\IPMonitor\Code\NodeList.h

     文件     254090  2007-06-27 16:22  第5章 IP包流量分析程序\IPMonitor\Exe\IPMonitor.exe

     文件      45568  2007-06-30 12:20  第5章 IP包流量分析程序\IPMonitor\使用说明.doc

     文件        119  2010-05-20 15:07  第5章 IP包流量分析程序\我的空间.url

     文件        125  2010-05-20 15:08  第5章 IP包流量分析程序\说明.url

     目录          0  2010-05-20 15:07  第5章 IP包流量分析程序\IPMonitor\Code

     目录          0  2010-05-20 15:07  第5章 IP包流量分析程序\IPMonitor\Exe

     目录          0  2010-05-20 15:07  第5章 IP包流量分析程序\IPMonitor

     目录          0  2010-05-20 15:08  第5章 IP包流量分析程序

----------- ---------  ---------- -----  ----

               511210                    19


评论

共有 条评论