资源描述:
《实验五 ip包解析与分片重组的编程实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《TCP/IP原理与应用》实验报告得分:班级姓名学号实验名称IP包解析与分片重组的编程实现实验室号实验目的1.掌握IP包的格式。2.掌握IP包的分片重组。3.练习使用winpcap编程实现IP包的解析与分片重组。实验要求1.认真阅读和掌握本实验的相关知识点。2.完成实验报告。实验内容Ø编程实现IP包各域的解析:n输出各域的内容n将协议域对应的协议编号转换为对应的ASCII表示的协议名,n说明IP是否经过分片Ø编程实现分片重组功能n将经过分片的IP包重组成原来的数据包,并以16进制输出内容(考虑到长度限制,可以
2、只输出数据包交界部分的内容,以验证重组的正确性)n可假设IP包按顺序到达,且不会有丢包.实验步骤或源代码#define DATA_LENGTH 500#include void Packet_Analyser(u_char* user,const struct pcap_pkthdr* header,const u_char *pkt_data);void Prit_Proto(int ProtocelValue);//声明一个协议输出函数,简化格式/* 4字节的IP地址 */typedef
3、struct ip_address{u_char byte1;u_char byte2;u_char byte3;u_char byte4;} ip_address;typedef struct ip_header{u_char ver_ihl; // 版本 (4 bits) + 首部长度 (4 bits)u_char tos; // 服务类型(Type of service)u_short tlen; // 总长(Total length)u_sh
4、ort identification; // 标识(Identification)u_short flags_fo; // 标志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits)u_char ttl; // 存活时间(Time to live)u_char proto; // 协议(Protocol)u_short crc; // 首部校验和(Header checksum)ip_
5、address saddr; // 源地址(Source address)ip_address daddr; // 目的地址(Destination address)u_int op_pad; // 选项与填充(Option + Padding)} ip_header;static int COUNT=1;ip_header *Pheader_Cache=(ip_header*)malloc(sizeof(ip_header)*COUNT);void main(){
6、pcap_if_t *alldevs;pcap_if_t *d;pcap_t *adhandle;int index;int i=0;char errbuf[PCAP_ERRBUF_SIZE];if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)==-1){fprintf(stderr,"Error in pcap_findalldevs_ex:%s",errbuf);exit(1);}for(d=alldevs;d!=NUL
7、L;d=d->next){printf("%d:%s",i++,d->name);if(d->description)printf("%s",d->description);else printf("No Description available");}if(i==0){printf("No interfaces found!Make sure WinpCap is installed.");return;}printf("If You Want Choose a Device To
8、 Capture The Data Please Input The Number Before The Device");scanf("%d",&index);if(index>i
9、
10、index<0){printf("You Choosed An Error Num");exit(1);}for(d=alldevs,i=0;inext,i++); printf("You