欢迎来到天天文库
浏览记录
ID:47386473
大小:89.50 KB
页数:11页
时间:2019-07-12
《IP数据包的捕获和解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.课程设计应达到的目的(1)使学生掌握网络通信协议的基本工作原理;(2)培养学生基本掌握网络编程的基本思路和方法;(3)能提高学生对所学计算机网络理论知识的理解能力;(4)能提高和挖掘学生对所学知识的实际应用能力和创新能力;(5)提高学生的科技论文写作能力。2.课程设计题目及要求IP数据包捕获与解析的设计。设计任务:(1)掌握IP数据包的工作原理与报头设计的相关字段(2)理解IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移量、生存时间、上层协议类型、头校验合、源IP地址和目的IP地址等内容。设计内容
2、:根据IP数据包的标准格式,编写程序捕获IP数据包并进行解析,并将解析后各IP包的头部与数据字段写入输出文件。数据字段的值从捕获的文件中获取。为了获取网络中的IP数据包,可以采用Winsock的数据库查询函数gethostname()和gethostbyname()解决,捕获IP数据包并解析IP地址等内容。3.课程设计思想IP数据报的格式说明:IP数据包格式包含了标头固定部分,标头可变部分和数据区三部分。IP数据报标头部分固定为20个字节,其中包含了12个参数域,各参数域隐含着网间协议的传输机制。IP具体的标头格式如图1所示。各
3、参数域的具体含义如下:1)版本号:长度4位,表示所使用的IP协议的版本。IPv4版本号字段值为4;IPV6版本号字段号的值为6.2)标头长:长度4位,定义了一个以4B为一个单位的IP包的报头长度3)服务类型:共8位,高3位组成优先级子域,随后4位组成服务类型子域。4)数据报总长度:总长度为2B(即6位)。定义了以字节为单位的数据报的总长度。5)重装标识:长度16位,用于识别IP数据报的编号,让目的主机判断新来的数据属于哪个分组。6)分片标识:共3位,最高位为0;DF禁止分片标识。DF=0,可以分片;DF=1,不能分片。MF:分片
4、标识。MF=0,表示接的是最后一个分片;MF=1,不是最后一个分片。7)片偏移值:共13位,说明分片在整个数据报中的相对位置。8)生存周期:8位,用来设置数据数据报在整个网络传输过程中的寿命。常以一个数据报可以经过的最多的路由器跳步数来控制。9)协议类型:共8位,表示该IP数据报的高层协议类型。1)标头校验和:共16位,用于存放检查报头错误的校验码。2)源、宿主机地址:共32位,分别表示发送和接受数据报的源主机和宿主机的IP地址。3)选项数据域:0-40B,用于控制和测试。IP数据包的格式为:IP数据包的C++定义:typede
5、fstruct_IP{union{BYTEVersion;//版本BYTEHdrLen;//IHT};BYTEServiceType;//服务类型WORDTotalLen;//总长WORDID;//标识union{WORDFlags;//标志WORDFragOff;//分段偏移};BYTETimeToLive;//生命期BYTEProtocol;//协议WORDHdrChksum;//头校验和DWORDSrcAddr;//源地址DWORDDstAddr;//目的地址BYTEOptions;//选项}IP;套接字的使用:本程序使用
6、套接字socket编程,将网卡设为能够接受流经网卡的所有类型的数据包。首先,初始化套接字,然后监听数据包,解析数据包。SOCKETsock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用来创建套接字,其参数为通信发生的区字段和套接字的类型。WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen)函数用来把网卡设置为混杂模式。recv(sock,buffer,65535,0)函数用来接收经过的IP包,其参数分别是套接字描述符,缓冲区的地址,缓
7、冲区的大小。4.课程设计流程图NoYes开始构造程序运行文件,生成输出文件创建并初始化原始套接字设置网卡混杂模式监听网卡捕获和解析IP数据报输出解析信息,并存入文档结束是否达到需要次数五、部分程序设计的分析1、使用原始套接字要进行IP层数据包的接收和发送,应使用原始套接字。创建原始套接字的代码如下:SOCKETsock;sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);在WSASoccket函数中,第一个参数指定通信发生的区字段,AF_
8、INET是针对Internet的,允许在远程主机之间通信。第二个参数是套接字的类型,在AF_INET地址族下,有SOCK_STREAM、SOCK_DGRAM、SOCK_RAW三种套接字类型。在这里,设置为SOCK_RAW,表示声明的是一个原始套接字类型。第三个参
此文档下载收益归作者所有