欢迎来到天天文库
浏览记录
ID:2229622
大小:4.12 MB
页数:11页
时间:2017-11-15
《网络编程-ip包捕获实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、IP数据包捕获程序设计一、实验目的本实验让同学们将所学知识加以运用,并加强掌握IP数据报格式、理解IP协议的工作原理及工作过程、掌握捕获IP等数据报以及对捕获到的IP数据报进行分析的能力。并希望通过探索,在实践应用中提高自身的编程能力。二、实验软件VisualStudio2008三、实验步骤1、定义IP头部的数据结构 IP数据包由IP头部与IP数据构成,需要自行构造的是IP数据包的头部。在解析IP头部的各个字段之前,首先需要构造IP头部的数据结构,包括1字节的版本与头部长度、1字节的服务类型、2字节的总长
2、度、2字节的标识符、2字节的标志位与片偏移、1字节的生存周期、1字节的协议、2字节的头部校验、4字节的源地址与4字节的目的地址。这里,不需要构造选项与填充字段。2、创建原始套接字 为了不活经过本地网卡的IP数据包,需要使用原始套接字来进行通信。首先,调用socket()函数创建原始套接字,SOCK_RAW表示原始套接字,IPPROTO_IP表示IP协议;然后,获取主机名和主机ip,并且与sock绑定;3、接受与解析IP数据包 默认情况下,网卡不会接收目的地址不是自己的IP数据包,也就是说应用程序无法接收无
3、关的数据包。将网卡设置为混杂模式,然后,调用recv()函数接收通过网卡的IP包,由于IP包的最大长度为65535字节,因此接收缓冲区的大小不能小于65535字节;最后,将IP包头部复制到定义的IP头部结构中,并且依次将那些需要解析的字段值取出。 下面给出的是接收与解析IP数据包的代码主程序流程图如下所示:开始输入Ip包数目建立Socket库绑定创建原始Socket设置ip头操作选项网卡绑定Socket设置网卡混杂模式接下图输入Ip包数目接上图:解析ip包头部字段关闭原始Socket解除Socket库绑定
4、结束四、实验结果和分析源代码:#include"stdafx.h"#include"stdio.h"#include"winsock2.h"#include"ws2tcpip.h"#includeusingnamespacestd;#pragmacomment(lib,"ws2_32.lib")//加载ws2_32.lib#defineIO_RCVALL_WSAIOW(IOC_VENDOR,1)typedefstructIP_HEAD{union{unsignedcharVersion
5、;//版本(字节前位)unsignedcharHeadLen;//头部长度(后位)};unsignedcharServiceType;//服务类型unsignedshortTotalLen;//总长度unsignedshortIdentifier;//标识符union{unsignedshortFlags;//标志位(字前位)unsignedshortFragOffset;//片偏移(后位)};unsignedcharTimeToLive;//生存时间unsignedcharProtocol;//协议un
6、signedshortHeadChecksum;//头部校验和unsignedintSourceAddr;//源IP地址unsignedintDestinAddr;//目的IP地址unsignedcharOptions;//选项}ip_head;voidmain(){//启动winsockWSADATAWSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){cout<7、t,这里是原始socketSOCKETsock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);if(sock==INVALID_SOCKET){cout<8、endl;return;}*///获得本地主机名charhostName[128];if(gethostname(hostName,100)==SOCKET_ERROR){cout<
7、t,这里是原始socketSOCKETsock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);if(sock==INVALID_SOCKET){cout<8、endl;return;}*///获得本地主机名charhostName[128];if(gethostname(hostName,100)==SOCKET_ERROR){cout<
8、endl;return;}*///获得本地主机名charhostName[128];if(gethostname(hostName,100)==SOCKET_ERROR){cout<
此文档下载收益归作者所有