




免费预览已结束,剩余2页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#include #include #include #pragma comment (lib,Ws2_32.lib)#define BUFFER_SIZE 65535#define FRAGMENT_SIZE 10000 /分片数据部分最长为10000#define FRAGMENT_NUM 7#define START 20#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)typedef struct _IP_HEADER /定义IP头BYTE Version_HeadLen; /版本(前4位)和首部长度 BYTE ServiceType; /服务类型WORD TotalLen; /数据报总长WORD ID; /标识WORD Flags_FragOff; /标志(前3位),后13位表示页偏移BYTE TimeToLive; /生存周期BYTE Protocol; /协议WORD HdrChksum; /头校验和DWORD SrcAddr; /源地址DWORD DstAddr; /目地地址IP_HEADER;void checksum(IP_HEADER *ip,WORD *sum)unsigned int sum_tmp;sum_tmp=MAKEWORD(ip-ServiceType,ip-Version_HeadLen)+ip-TotalLen+ip-ID+ip-Flags_FragOff+MAKEWORD(ip-Protocol,ip-TimeToLive)+ip-HdrChksum+(WORD)(ip-SrcAddr16)+(WORD)(ip-SrcAddr & 0xffff)+(WORD)(ip-DstAddr16)+(WORD)(ip-DstAddr & 0xffff);if(sum_tmp(216-1)sum_tmp=(unsigned short)sum_tmp+1;*sum=(WORD)(sum_tmp);char * parseServiceType_getProcedence(BYTE b)switch(b5)/获取服务类型字段中优先级子域case 7: return Network Control;/网络控制break;case 6:return Internet work Control; /网络控制break;case 5:return CRITIC/ECP; break;case 4:return Flash Override;/最优先信号break;case 3:return Flsah; break;case 2:return Immediate; break;case 1:return Priority;/协议break;case 0:return Routine;/路由break;default:return Unknow;break;char * parseServiceType_getTOS(BYTE b)b=(b1)&0x0f;/获取服务类型字段中的TOS子域switch(b) case 0:return Normal service; /正常运行break;case 1:return Minimize monetary cost; /成本break;case 2:return Maximize reliability; /可靠性break;case 4:return Maximize throughput; /吞吐量break;case 8:return Minimize delay; /延迟break;case 15:return Maximize security; /安全性break; default:return Unknow; char * getProtocol(BYTE Protocol) /获取协议字段共8位switch(Protocol) /以下为协议号说明: case 1:return ICMP; /Internet控制报文协议case 2:return IGMP; /Internet组管理协议case 4:return IP in IP;/移动IP数据封装和隧道case 6:return TCP;/传输控制协议case 8:return EGP;/外部网关协议case 17:return UDP;/用户数据报文协议case 41:return IPv6;case 46:return RSVP;/资源预留协议case 89:return OSPF;/Open Shortest Path First 开发式最短路径优先default:return UNKNOW;void ipparse(FILE* file,IP_HEADER *ip_pointer)fseek(file,0,SEEK_END);fprintf(file,版本号=%drn,ip_pointer-Version_HeadLen4);fprintf(file,报头标长= %d (BYTE)rn,(ip_pointer-Version_HeadLen & 0x0f)*4); /首部长度是以4个字节为单位的fprintf(file,服务器类型 = %s,%srn,parseServiceType_getProcedence(ip_pointer-ServiceType),parseServiceType_getTOS(ip_pointer-ServiceType);fprintf(file,总长度 = %d(BYTE)rn,ip_pointer-TotalLen);fprintf(file,标识 = %drn,ip_pointer-ID);fprintf(file,标志位 DF=%d , MF=%drn,(ip_pointer-Flags_FragOff14)&0x01),(ip_pointer-Flags_FragOff13)&0x01);fprintf(file,分段偏移值 = %drn,(ip_pointer-Flags_FragOff&0x1fff);fprintf(file,生存期 = %d (hops)rn,ip_pointer-TimeToLive);fprintf(file,协议 = %srn,getProtocol(ip_pointer-Protocol);fprintf(file,头校验和 = 0x%0xrn,ip_pointer-HdrChksum);fprintf(file,源IP地址 = %srn,inet_ntoa(*(in_addr*)&ip_pointer-SrcAddr);fprintf(file,目的IP地址 = %srn,inet_ntoa(*(in_addr*)&ip_pointer-DstAddr);fprintf(file,-rn);void assisgment(IP_HEADER *sou_pointer,IP_HEADER *des_pointer )des_pointer-Version_HeadLen=sou_pointer-Version_HeadLen;des_pointer-ServiceType=sou_pointer-ServiceType;des_pointer-TotalLen=sou_pointer-TotalLen;des_pointer-ID=sou_pointer-ID;des_pointer-TimeToLive=sou_pointer-TimeToLive;des_pointer-Protocol=sou_pointer-Protocol;des_pointer-SrcAddr=sou_pointer-SrcAddr;des_pointer-DstAddr=sou_pointer-DstAddr;void main()FILE* file;file=fopen(分片数据报头.txt,wb+);WORD rv;WSADATA WSAData; /定义了能够储存WSAStarup调用返回值的结构rv=MAKEWORD(2,2); /Winsock2版本WSAStartup(rv,&WSAData);SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP); /创建套接字,sock为套接字描述符BOOL flag=true;setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(CHAR*)&flag,sizeof(flag);/任意类型、任意状态套接口的设置选项值char hostName128;gethostname(hostName,100); /获取主机名hostent * pHostIP;/获取本地IP地址pHostIP = gethostbyname(hostName);sockaddr_in addr_in;addr_in.sin_addr=*(in_addr *)pHostIP-h_addr_list0;addr_in.sin_family = AF_INET;addr_in.sin_port = htons(6000); /将无符号短整型主机数据转换为网络字节顺序数据bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in); DWORD dwBufferLen10; /设置网卡为混杂模式DWORD dwBufferInLen=1;DWORD dwBytesReturned=0;WSAIoctl(sock, IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);char bufferBUFFER_SIZE; /设置缓冲区int n=0; /n是一个标志用来使得输出更加调理char c;dosystem(cls); IP_HEADER fragment_HeaderFRAGMENT_NUM; int size=recv(sock,buffer,BUFFER_SIZE,0); /接收数据包 IP_HEADER ip=*(IP_HEADER*)buffer; int fragment_num=(ip.TotalLen-(ip.Version_HeadLen & 0x0f)*4)/FRAGMENT_SIZE+1;printf(nn接受到IP数据报的报头信息是n);if (size0) ipparse(file,&ip);ipparse(stdout,&ip); printf(nnIP数据报分片n);printf(-n);for(int j=0;jfragment_num;j+)assisgment(&ip,&fragment_Headerj);/对总长度标志位和页偏移赋值unsigned short flags_flagoff;unsigned short total_len;WORD cs;if(j!=fragment_num-1)flags_flagoff=j*FRAGMENT_SIZE/8+(short)8192; /8192对应的是标志位的MFtotal_len=FRAGMENT_SIZE+(unsigned short)(ip.Version_HeadLen&0x0f)*4);elseflags_flagoff=j*FRAGMENT_SIZE/8;total_len=ip.TotalLen%FRAGMENT_SIZE +(unsigned short)(ip.Version_HeadLen&0x0f)*4);fragment_Headerj.Flags_FragOff=(WORD)flags_flagoff;fragment_Headerj.TotalLen=total_len;fragment_Headerj.HdrChksum=0;/checksum(fragment_Headerj,c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 综合能源服务员协作考核试卷及答案
- 手工具产品标准化与认证流程
- 2024年粮油食品检验人员通关题库及参考答案详解【基础题】
- 金属炊具及器皿制作工协同作业考核试卷及答案
- 智力开发教育成果评估报告
- 脂肪烃衍生物生产工主管竞选考核试卷及答案
- 期货品牌服务优化分析报告
- 稀土离子交换工技能比武考核试卷及答案
- 2025年建筑工程技术考试试题及答案
- 2025年河南省防灾减灾知识竞赛题库(附答案)
- 肢体被动活动技术
- (2025年标准)供热移交协议书
- 区块链技术在资产追踪中的应用
- 2025年通信安全员(ABC证)考试题库(含答案)
- ISO9001-2015基础知教学课件
- 2023 课件 C++类的概念及程序设计
- 支行案防管理办法
- 6.1 包饺子(课件)北师大版三年级数学上册
- 考务人员管理办法
- 鱼道运行管理办法
- 乡村医生超声培训课件
评论
0/150
提交评论