资源简介

编写程序,监控本地网络,捕获一段时间内以本机为源地址或目的地址的IP数据包(不包括以广播形式发出的数据包),统计IP数据包的信息,列出本机与其他主机之间不同协议类型IP数据包的流量。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include
#include  
#pragma comment(lib“ws2_32“) //指定连接到网络应用和internet
#define IO_RCVALL _WSAIOW(IOC_VENDOR1) 
typedef struct IP_HEAD 

union //定义联合

unsigned char Version; 
unsigned char HeadLen; 
}; 
unsigned char ServiceType; 
unsigned short TotalLen; 
unsigned short Identifier; 
union 

unsigned short Flags; 
unsigned short FragOffset; 
}; 
unsigned char TimeToLive; 
unsigned char Protocol; 
unsigned short HeadChecksum; 
unsigned int SourceAddr; 
unsigned int DestinAddr; 
unsigned char Options; 
}ip_head; //定义IP头部的数据结构

void main(int argcchar *argv[]) 

using namespace std; 
ofstream outfile(“C:\\logfile.txt“ios::out);

/*if(argc!=2) 

cout<return;
} */


WSADATA WSAData; 
if(WSAStartup(MAKEWORD(22) &WSAData)!=0) 

cout<return; 


SOCKET sock=socket(AF_INETSOCK_RAWIPPROTO_IP); //三个参分别为通信发生的区字段,套接字的类型,与IP协议
if(sock==INVALID_SOCKET) 

cout<closesocket(sock); 
WSACleanup(); 


BOOL flag=TRUE; 
if(setsockopt(sockIPPROTO_IPIP_HDRINCL(char *) &flagsizeof(flag))==SOCKET_ERROR) 

cout<closesocket(sock); 
WSACleanup(); 


char hostName[128];//获取主机名 
if(gethostname(hostName100)==SOCKET_ERROR) 

cout<closesocket(sock); 
WSACleanup(); 


hostent *pHostIP; //获取本地IP
if((pHostIP=gethostbyname(hostName))==NULL) 

cout<closesocket(sock); 
WSACleanup(); 


sockaddr_in host_addr;// 
host_addr.sin_family=AF_INET; 
host_addr.sin_port=htons(6000); 
host_addr.sin_addr=*(in_addr *)pHostIP->h_addr_list[0]; 
if(bind(sock(PSOCKADDR)&host_addrsizeof(host_addr))==SOCKET_ERROR) 

cout<closesocket(sock); //绑定网卡
WSACleanup(); 



DWORD dwBufferLen[10]; 
DWORD dwBufferInLen=1; 
DWORD dwBytesReturned=0; 
if(WSAIoctl(sock  IO_R

评论

共有 条评论