计算机网络课程设计(第七章)解析IP数据包(完整程序代码)
时间:2025-06-16
时间:2025-06-16
计算机网络课程设计(吴功宜 吴英 等编著)机械工业出版社课程设计目的: 本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
计算机网络课程设计
——机械工业出版社第7章:解析IP数据包
课程设计目的:
本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP 数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
完整程序代码:
#include<stdio.h>
#include<winsock2.h>
#include<ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib")
typedef struct _IP_HEADER
{
union
{
BYTE Version;
BYTE HdrLen;
};
BYTE ServiceType;
WORD TotalLen;
WORD ID;
union
{
WORD Flags;
WORD FragOff;
};
BYTE TimeToLive;
BYTE Protocol;
WORD HdrChksum;
DWORD SrcAddr;
DWORD DstAddr;
BYTE Options;
} IP_HEADER;
#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)
#define BUFFER_SIZE 65535
void getVersion(BYTE b,BYTE &version)
{
version=b>>4;
计算机网络课程设计(吴功宜 吴英 等编著)机械工业出版社课程设计目的: 本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
}
void getIHL(BYTE b,BYTE &length)
{
length=(b&0x0f)*4;
}
char* parseServiceType_getProcedence(BYTE b) {
switch(b>>5)
{
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 "Flash";
break;
case 2:
return "Immediate";
break;
case 1:
return "Priority";
break;
case 0:
return "Routine";
break;
default:
return "Unknown";
}
}
char* parseServiceType_getTOS(BYTE b) {
b=(b>>1)&0x0f;
switch(b)
{
case 0:
计算机网络课程设计(吴功宜 吴英 等编著)机械工业出版社课程设计目的: 本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
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 "Unknown";
}
}
void getFlags(WORD w,BYTE &DF,BYTE &MF) {
DF=(w>>14)&0x01;
MF=(w>>13)&0x01;
}
void getFragOff(WORD w,WORD &fragOff) {
fragOff=w&0x1fff;
}
char* getProtocol(BYTE Protocol)
{
switch (Protocol)
{
case 1:
return "ICMP";
case 2:
return "IGMP";
case 4:
return "IP in IP";
case 6:
return "TCP";
case 8:
return "EGP";
case 17:
return "UDP";
case 41:
计算机网络课程设计(吴功宜 吴英 等编著)机械工业出版社课程设计目的: 本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。
return "IPv6";
case 46:
return "RSVP";
case 89:
return "OSPF";
default:
return "UNKNOWN";
}
}
void ipparse(FILE* file,char* buffer)
{
IP_HEADER ip=*(IP_HEADER*)buffer;
fseek(file,0,SEEK_END);
fprintf(file,"----------------------------------\n");
BYTE version;
getVersion(ip.Version,version);
fprintf(file,"Version:%d\n",version);
BYTE headerLen;
getIHL(ip.HdrLen,headerLen);
fprintf(file,"HdrLen:%d(Bytes)\n",headerLen);
fprintf(file,"ServiceType: %s,%s\n",
parseServiceType_getProcedence(ip.ServiceType),
parseServiceType_getTOS(ip.ServiceType));
fprintf(file,"TotalLen: %d(Bytes)\n",ip.TotalLen);
fprintf(file,"ID: %d\n",ip.ID);
BYTE DF,MF;
getFlags(ip.Flags,DF,MF);
fprintf(file,"Flags:DF=%d,MF=%d\n",DF,MF);
WORD fragOff;
getFragOff(ip.FragOff,fragOff);
fprintf(file,"FragOff: %d\n",fragOff);
fprintf(file,"FragOff: %d\n",fragOff);
fprintf(file,"TimeToLive: %d(Hops)\n",ip.TimeToLive);
fprintf(file,"Protocol: %s\n",getProtocol(ip.Protocol));
fprintf(file,"HdrChksum: 0x%0x\n",ip.HdrChksum);
fprintf(file,"SrcAddr: %s\n",inet_ntoa(*(in_addr*)&ip.SrcAddr));
fprintf(file,"DstAddr: %s\n",inet_ntoa(*(in_addr*)&ip.DstAddr)); }
void main(int argc,char*argv[])
{
if(argc!=2)
{
printf("Please input command: ParseArp output_file");
return;
}
FILE* fil …… 此处隐藏:3134字,全部文档内容请下载后查看。喜欢就下载吧 ……