计算机网络课程设计(第七章)解析IP数据包(完整程序代码)

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……

计算机网络课程设计(第七章)解析IP数据包(完整程序代码).doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219