欢迎来到天天文库
浏览记录
ID:34955675
大小:64.50 KB
页数:8页
时间:2019-03-15
《1.结构体说明》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1.结构体说明 在程序中,我们将要进行分析的各数据包头格式用结构体进行定义。这样便于对数据包的解析,使每个字段清楚易懂。以太帧头格式结构体,共14个字节: typedefstructether_header{ unsignedcharether_dhost[6];//目的MAC地址 unsignedcharether_shost[6];//源MAC地址 unsignedshortether_type;//协议类型 }ETHHEADER,*PETHHEADER;IPv4报头格式结构体,共20个字节:typedefs
2、tructipv4_header{unsignedcharver_ihl;//版本(4bits)+首部长度(4bits)unsignedchartos;//服务类型unsignedshorttlen;//数据报总长度unsignedshortidentification;//标识unsignedshortflags_fo;//标志(3bits)+片偏移(13bits)unsignedcharttl;//生存时间unsignedcharproto;//协议unsignedshortcrc;//首部校验和u_charip_src
3、[4];//源IP地址u_charip_dst[4];//目的IP地址}IPHEADER,*PIPHEADER;IPv6报头格式结构体,共40个字节:typedefstructipv6_header{u_charver_tf;//版本号(4bit)u_chartraffic;//优先级(8bit)u_shortlabel;//流标识(20bit)u_charlength[2];//报文长度(16bit)u_charnext_header;//下一头部(8bit)u_charlimits;//跳数限制(8bit)u_charS
4、rcv6[16];//源IPv6地址(128bit)u_charDestv6[16];//目的IPv6地址(128bit)}IPv6_HEADER,*PIPv6_HEADER;TCP报头格式结构体,共20个字节:typedefstructtcp_header{WORDSourPort;//源端口号 WORDDestPort;//目的端口号DWORDSeqNo;//序号DWORDAckNo;//确认序号BYTEHLen;//首部长度(保留位)BYTEFlag;//标识(保留位)WORDWindow;//窗口大小WORDChk
5、Sum;//校验和WORDUrgPtr;//紧急指针}TCPHEADER,*PTCPHEADER;UDP报头格式结构体,共8个字节:typedefstructudp_header{u_shortsport;//源端口号u_shortdport;//目的端口号u_shortlen;//数据报长度u_shortcrc;//校验和}UDPHEADER,*PUDPHEADER; 2.程序说明程序1利用WinPcap函数库函数解析捕获数据包的以太帧头程序名:AnalyzeETH_WinPcap.CPP 该程序通过利用WinPcap
6、提供的捕获数据包函数,对网络中的数据包进行采集分析。WinPcap中提供的函数pcap_open_live()可以获取网络适配器,通过函数pcap_loop(pcap_t*p,intcnt,pcap_handledispatch_handle,u_char*user)直接深入到数据链路层进行网络数据的捕获,将捕获的数据传到函数dispatch_handle(u_char*,constpcap_pkthdr*header,constu_char*pkt_data)中,该函数的参数pkt_data指向的即是捕获的数据包。这样,我
7、们可以捕获局域网内数据链路层的以太帧,并按照以太帧头格式对数据包进行解析,以获得以太帧头中的有关信息。同时将捕获数据存入磁盘中。通过该程序,可以分析出局域网内传输的各类网络层数据包的情况。程序完整代码详见程序1(AnalyzeETH_WinPcap.CPP)。 程序2利用WinPcap函数库函数解析捕获的IPv4数据报包头程序名:AnalyzeIPv4_WinPcap.CPP 该程序同样通过WinPcap提供的函数,获取网络适配器,利用函数pcap_loop(pcap_t*p,intcnt,pcap_handledisp
8、atch_handle,u_char*user)捕获数据包。并将捕获的数据传到函数dispatch_handle(u_char*,constpcap_pkthdr*header,constu_char*pkt_data)中,在该函数中对以太帧包进行过滤,将以太帧头中协议类型字段(ether
此文档下载收益归作者所有