资源描述:
《IP数据包的捕获与解析.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、IP数据包的捕获与解析编写程序捕获IP数据包,并将解析的结果显示出来本例中,我们要对IP包头除选项字段外的内容进行解析具体要求如下:生成可执行文件PackParse.exe运行该文件的命令行格式为:PackParsepack_sum(pack_sum是要抓取的IP包的数量)要将解析的IP头的内容显示在控制台上,格式:头部长度:xx服务类型:xx总长度:xx标识符:xx标志位:xx,DF,MF片偏移:xx生存周期:xx协议:xx头部校验和:xx源IP地址:xx目的IP地址:xx运行结果演示如下页关键问题-启动winsock使用函数WSAStartup()完成winsock的启动int
2、WSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);具体代码:WSADATAWSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){……}本程序请求使用的Socket版本返回请求的Socket版本的信息关键问题-初始化socket(创建)使用socket()函数来给应用程序创建一个套接字SOCKETsocket(intaf,inttype,intprotocol);Socket使用的协议族TCP/IP为AF_INETSocket类型,有三种,本程序采用rawSocket使用的协议,本程
3、序为IPPROTO_IP关键问题-初始化socket(创建)具体代码SOCKETsock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);if(sock==INVALID_SOCKET){……….}关键问题-初始化socket(绑定)socket()创建了一个套接口后,需要将该套接口与该主机上提供服务的某端口联系在一起,bind()函数用于完成这样的绑定intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);刚才创建的Socket的名称sockaddr_in结构的socket地址(点这里)地址参数(na
4、me)的长度Sockaddr_in结构:structsockaddr_in{shortintsin_family;/*通信类型*/unsignedshortintsin_port;/*端口,2bytes*/structin_addrsin_addr;/*IP,4bytes*/unsignedcharsin_zero[8];/*填充空白信息*/};in_addr结构定义如下:structin_addr{unsignedlong s_addr ;}返回AF_INETsin_portsin_addrsin_zero关键问题-初始化socket(创建/绑定)charhostName[1
5、28];gethostname(hostName,100);……hostent*pHostIP;gethostbyname(hostName);……sockaddr_inhost_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_addr,sizeof(host_addr))==SOCKET_ERROR)………….关键问题-设置网卡混杂模
6、式通常,网卡不能接收mac地址不是自己的IP数据包,要想能捕获所有IP数据包,应该先将网卡的工作模式设置为“混杂”代码:DWORDdwBufferLen[10];DWORDdwBufferInLen=1;DWORDdwBytesReturned=0;WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL…………关键问题-接收IP数据包要从套接口上接收数据,就要使用recv()函数。intrecv(S
7、OCKETs,charFAR*buf,intlen,intflags);刚才创建的Socket的名称用于接收数据的缓冲区缓冲区的长度接收方式,0表示正常接收关键问题-接收IP数据包charbuffer[65535];while(捕获数据包没有结束){recv(sock,buffer,65535,0);{关键问题-定义IP数据包数据结构在对IP解析前,先要构在一个IP头部的数据结构,这个结构和IP包头的结构要一一对应typedefstruct{union{unsigne