版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成都信息工程学院成都信息工程学院成都信息工程学院成都信息工程学院iiii如果链表的长度达到指定的长度,创建一个线程对该链表的IP包进行解析;再设置一个在IP数据包链表不足给定的长度,而又中止IP捕获时,对链表的处理;为下一个IP包链表创建一个链表头。建立一个进行IP包解析并显示的线程,进行解析IP数据包,然后显示IP数据包。5、运行结果截获IP数据包程序运行结果如下:6、总结这次计算机网络课程设计是解析IP数据包,通过这次上机充分应用了所学的计算机网络和C语言的知识,并上网搜索一部分相当资料,粗略设计出该程序通过本次课程设计,充分运用了所学的计算机网络知识,设计出了如何解析IP数据包,从而更加深刻的了解到了IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。在课程设计的过程也碰到的不少问题。该程序也存在着不少的缺陷,比如并不是所有的数据包都能捕获,女口:IP数据包以外的数据包都抓不到;只支持ICMRIGMPTCPUDP这些协议。7、课程设计参考资料1.《计算机网络(第5版)》主编:谢希仁 出版社:电子工业出版社出版时间:2009年11月2.《数据通信与网络(第四版)》吴时霖周正康吴永辉译&源程序代码#include"winsock2.h"#include"ws2tcpip.h"#include"iostream.h"#include"stdio.h"#pragmacomment(lib,"ws2_32.lib")#defineIO_RCVALL_WSAIOW(IOC_VENDOR,1)#defineBUFFER_SIZE65535/*定义IP头部数据结构*/typedefstruct_IP_HEADER{union{BYTEVersion;//版本(前4位)BYTEHdrLen;II报头标长(后四位),IP头长度};BYTEServiceType;II服务类型WORDTotalLen;II总长度WORDID;II标识union{WORDFlags;WORDFragOff;};BYTETimeToLive;BYTEProtocol;WORDHdrChksum;DWORDSrcAddr;DWORDDstAddr;BYTEOptions;}IP_HEADER;//逐位解析IP头中的信息,获取版本号voidgetVersion(BYTEb,BYTE&version){version=b>>4;}voidgetlHL(BYTEb,BYTE&result){result=(b&0x0f)*4;}//解析服务类型char*parseServiceType_getProcedence(BYTEb){switch(b>>5){case7:return"NetworkControl";case6:return"InternetworkControl";case5:return"CRITIC/ECP";case4:return"FlashOverride";case3:return"Falsh";case2:return"Immediate";case1:return"Priority";case0:return"Routine";default:return"Unknown";}}char*parseServiceType_getTOS(BYTEb){b=(b>>1)&OxOf;switch(b){case0:return"Normalservice";case1:return"Minimizemonetarycost";case2:return"Maximizereliability";case4:return"Maximizethroughput";case8:return"Minimizedelay";case15:return"Maximizesecurity";default:return"Unknown";}}/*获取禁止分片标志和分片标志 */voidgetFlags(WORDw,BYTE&DF,BYTE&MF){DF=(w>>14)&0x01;MF=(w>>13)&0x01;}/*获取分片偏移量*/voidgetFragoff(WORDw,WORD&fragoff){fragoff=w&0x1ffff;}〃获取协议char*getProtocol(BYTEProtocol){switch(Protocol){case1:return"ICMP";case2:return"IGMP";case3:return"GGP";case4:return"IPinIP";case6:return"TCP";case8:return"EGP";case17:return"UDP";case41:return"IPv6";case46:return"OSPF";default:return"UNKNOWN";}}/*解析IP数据包*/voidipparse(FILE*file,char*buffer){IP_HEADERip=*(IP_HEADER*)buffer;fseek(file,O,SEEK_END);BYTEversion;getVersion(ip.Version,version);fprintf(file,"版本=IPV%d\r\n",version);BYTEheaderLen;getIHL(ip.HdrLen,headerLen);fprintf(file,"头长度=%d(BYTE)\r\n",headerLen);fprintf(file,"服务类型=%s,%s\r\n",parseServiceType_getProcedence(ip.ServiceType),parseServiceType_getTOS(ip.ServiceType));fprintf(file,"数据报长度=%d(BYTE)\r\n",ip.TotalLen);fprintf(file,"数据报ID=%d\r\n",ip.ID);/*DF表示禁止分片标志, MF表示分片标记 */BYTEDF,MF;getFlags(ip.Flags,DF,MF);fprintf(file,"分段标志DF=%d,MF=%d\r\n",DF,MF);WORDfragOff;getFragoff(ip.FragOff,fragOff);fprintf(file,"分段偏移值=%d\r\in",fragOff);fprintf(file,"生存期=%d(hops)\r\n",ip.TimeToLive);fprintf(file,"协议=%s\r\in",getProtocol(ip.Protocol));fprintf(file,"头校验和=0x%0x\r\n",ip.HdrChksum);fprintf(file,"源IP地址=%s\r\in",inet_ntoa(*(in_addr*)&ip.SrcAddr));fprintf(file,"目的IP地址=%s\r\n",inet_intoa(*(in_addr*)&ip.DstAddr));fprintf(file," \r\n");}/*程序入口*/intmain(intargc,char*argv[]){/*cmd参数*/if(argc!=2){printf("usageerror!'n");return-1;}FILE*file;/*以读写的方式建立一个文本文件 logfile.txt*/if((file=fopen(argv[1],"w+"))==NULL){printf("failtoopenfile%s","logfile.txt");return-1;}WSADatawsData;/*启动2.2版本的Socket,并将Socket版本信息保存到wsData中*/if(WSAStartup(MAKEWORD(2,2),&wsData)!=0){printf("WSAstartupfailed!'n");return-1;}fprintf(file,"Socket初始化...\r\n");fprintf(file,"==================================\r\n");fprintf(file,"描述:%s\r\n",wsData.szDescription);fprintf(file,"状态:%s\r\n",wsData.szSystemStatus);fprintf(file,"==================================\r\n");SOCKETsock;/*创建原始套接字*/if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET){printf("Cannotcreatesocket!\n");return-1;}BOOLflag=true;/*设置IP头操作选项*/if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag))==SOCKET_ERROR){printf("setsockoptfailed!\n");return-1;}charhostName[128];/*获取本地主机名 */
if(gethostname(hostName,100)==SOCKET_ERROR){printf("gethostnamefailed!\n");return-1;}hostent*pHostlP;/*根据主机名获取主机信息 */if((pHostlP=gethostbyname(hostName))==NULL){printf("gethostbynamefailed!\n");return-1;}printf("Hostname:%s\r\n",pHostlP->h_name);printf("IPAddress:%s\r\n",inet_ntoa(*((structin_addr*)pHostlP->h_addr)));/*封装IP地址信息*/sockaddr_inaddr_in;addr_in.sin_addr=*(in_addr*)pHostlP->h_addr_list[0];addr_in.sin_family=AF_INET;addr_in.sin_port=htons(6000);//监听的端口号/*把Socket绑定到本地网卡 */if(bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in))==SOCKET_ERROR){printf("bindfailed");return-1;}DWORDdwBufferLen[10];DWORDdwBufferlnLen=1;DWORDdwBytesReturned=O;/*设置网卡为混杂模式 */if(WSAIoctl(sock,IO_RCVALL,&dwBufferlnLen,sizeof(dwBufferlnLen),R){&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ERROprintf("icotlsocketfailed\n");R){return-1;}charbuffer[BUFFER_SIZE];printf(”=============开始解析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成都中医药大学第二附属医院招聘笔试真题2025
- 资金拆借合同(2026版)
- 江苏南通科技职业学院招聘笔试真题2025
- 2026 年山体塌方救援基础安全注意事项
- 2026年秋季开学:中学开学第一课 创新思维训练
- 2026年感染性疾病科肠道传染病护理实操
- 高中英语选择性必修一 Unit3 Fascinating Parks 词汇知识点背诵记忆
- 高考地理一轮复习 小练习专练10 宇宙中的地球
- 某制药厂成本制度
- 某钢铁厂卫生安全准则
- 江苏无锡川埠220kV变电站110kV出线配套工程报告表
- 挤密碎石桩施工方案
- 人教出版小学一年级语文上册看拼音写汉字及单元检验测试题【全册】
- 2022电力工程导地线展放安装施工作业指导书
- T-CWEC17-2020水利水电勘测设计单位安全生产标准化评审规程
- 工艺管道试压、吹扫方案
- 与孩子达成的手机使用协议君子协议
- JB T 5082.7-2011内燃机 气缸套第7部分:平台珩磨网纹技术规范及检测方法
- 锅炉设备进口合同中英文对照版
- 2023年网格员招聘考试复习题库(含答案)
- 绍兴市利和文具有限公司年产50吨文具橡皮生产线项目立项环境评估报告表
评论
0/150
提交评论