• 大小: 2.27MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2023-08-17
  • 语言: C/C++
  • 标签: C++)  

资源简介

开发平台: Windows XP SP2 Visual Studio 6.0 程序使用命令行运行:IPMonitor.exe duration_time。duration_time为监控时间,单位为秒。 程序的运行效果如下图所示:

资源截图

代码片段和文件信息

#include “IPMonitor.h“

#define BURRER_SIZE 65535

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

//这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据
WSADATA wsData;

// WSAStarup,是Windows SocKNDs Asynchronous的启动命令
if (WSAStartup(MAKEWORD(22)&wsData) != 0)
{
cout << “Windows SocKNDs Asynchronous starup 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.s

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

     文件    4244480  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\Debug\IPMonitor.bsc

     文件     213128  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\Debug\IPMonitor.exe

     文件     307260  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\Debug\IPMonitor.ilk

     文件      22882  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\Debug\IPMonitor.obj

     文件    4844656  2012-03-10 16:32  IP包流量分析程序\IPMonitor\Code\Debug\IPMonitor.pch

     文件     607232  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\Debug\IPMonitor.pdb

     文件          0  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\Debug\IPMonitor.sbr

     文件      10549  2012-03-09 10:46  IP包流量分析程序\IPMonitor\Code\Debug\IPNode.obj

     文件          0  2012-03-09 10:46  IP包流量分析程序\IPMonitor\Code\Debug\IPNode.sbr

     文件      33549  2012-03-09 10:46  IP包流量分析程序\IPMonitor\Code\Debug\NodeList.obj

     文件          0  2012-03-09 10:46  IP包流量分析程序\IPMonitor\Code\Debug\NodeList.sbr

     文件     287744  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\Debug\vc60.idb

     文件     102400  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\Debug\vc60.pdb

     文件       3675  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\IPMonitor.cpp

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

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

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

     文件     156672  2012-03-16 17:04  IP包流量分析程序\IPMonitor\Code\IPMonitor.ncb

     文件      50688  2012-03-16 17:04  IP包流量分析程序\IPMonitor\Code\IPMonitor.opt

     文件       1616  2012-03-16 17:00  IP包流量分析程序\IPMonitor\Code\IPMonitor.plg

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

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

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

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

     文件     254090  2007-06-28 00:22  IP包流量分析程序\IPMonitor\Exe\IPMonitor.exe

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

     目录          0  2012-06-02 19:17  IP包流量分析程序\IPMonitor\Code\Debug

     目录          0  2012-06-02 19:17  IP包流量分析程序\IPMonitor\Code

     目录          0  2012-06-02 19:17  IP包流量分析程序\IPMonitor\Exe

     目录          0  2012-06-02 19:17  IP包流量分析程序\IPMonitor

............此处省略4个文件信息

评论

共有 条评论

相关资源