搜档网
当前位置:搜档网 › 网络通信协议分析课程设计源代码和实验报告+帧封装、IP数据包解析和发送TCP数据包

网络通信协议分析课程设计源代码和实验报告+帧封装、IP数据包解析和发送TCP数据包

网络协议分析课程设计之协议编程

实验一帧封装

实验目的:

?编写程序,根据给出的原始数据,组装一个IEEE

802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input 2))。

?要求程序为命令行程序。比如,可执行文件名为framer.exe,则命令行形式如下:framer input,其中,inputfile为原始数据文件,outputfile为输出结果。

?输出:对应input1和input2得结果分别为output1和output2。

试验要求:

?编写程序,根据给出的原始数据,组装一个IEEE

802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input 2))。

?要求程序为命令行程序。比如,可执行文件名为framer.exe,则命令行形式如下:framer input,其中,inputfile为原始数据文件,outputfile为输出结果。

输出:对应input1和input2得结果分别为output1和output2

验设计相关知识:

帧:来源于串行线路上的通信。其中,发送者在发送数据的前后各添加特殊的字符,使它们成为一个帧。Ethernet从某种程度上可以被看作是机器之间的数据链路层连接。

按802.3标准的帧结构如下表所示(802.3标准的Ethernet帧结构由7部分组成)

其中,帧数据字段的最小长度为46B。如果帧的LLC数据少于46B,则应将数据字段填充至46B。填充字符是任意的,不计入长度字段值中。

在校验字段中,使用的是CRC校验。校验的范围包括目的地址字段、源地址字段、长度字段、LLC数据字段。

循环冗余编码(CRC)是一种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在通信领域广泛地用于实现差错控制。CRC校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误。

利用CRC 进行检错的过程可简单描述如下:在发送端根据要传送的k 位二进制码序列,以一定的规则产生一个校验用的r 位监督码(CRC 码),附在原始信息的后边,构成一个新的二进制码序列(共k+r 位),然后发送出去。在接收端,根据信息码和CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则在差错控制理论中称为“生成多项式”。

循环冗余校验码的特点:(1)CRC 校验码可检测出所有单个错误。(2)CRC 校验码可检测出所有奇数位错误。(3)CRC 校验码可检测出所有双位的错误(4)CRC 校验码可检测出所

有小于、等于校验位长度的突发错误。(5)CRC 校验码可以

](1/2)-[11

-k 的概率检测出长度为(K+1)位的突发错误

实验分析:

? 填充帧头部字段

要完成一次帧封装的过程,首先要完成的就是帧头部的装入,这一过程只要将签到吗、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可以了。其中,长度字段的值即为要发送的数据的实际长度。

? 填充数据字段

在填充数据字段的过程中要注意的主要问题是数据字段的长度。802.3标准中规定了帧数据字段的最小长度为46B ,最大长度为1500B 。如果数据不足46B ,则需要通过填充0来补足;若数据长度超过1500B ,则的大奖超过部分封装入下一个帧进行发送。

? CRC 校验

帧封装的最后一步就是对数据进行校验,并将校验结果记入帧校验字段。

程序流程图:

CRC计算流程图:

序源代码:

#include

#include

#include

void main(int argc,char*argv[])

{

//如果输入命令行不正确,则输出提示后退出。 if(argc!=3)

{

cout<

exit(0);

}

//打开指定的输出文件,以二进制方式打开并可读可写,如文件存在,则清除其内容。

fstream [2],ios::out|ios::in|ios::binary|ios::trunc,0);

for(int i=0;i<7;i++)

((char)0xaa);

((char)0xab);//写入B的前导码和B的帧前定界符。

char des_add[]={char(0x00),char(0x00),char(0xE4),char(0x86),char(0x3A),char(0xDC)}; (des_add,6);//写入B的目的地址。

char sor_add[]={char(0x00),char(0x00),char(0x80),char(0x1A),char(0xE6),char(0x65)}; (sor_add,6);//写入B的源地址。

//创建输入文件流并打开指定的输入文件,以二进制方式打开并可读。

ifstream in[1],ios::in|ios::binary,0);

int length=0;

in(0,ios::end);//将读指针移到文件末尾。

length=in();//计算指针偏移量,即为输入文件的长度。

unsigned char* data=new unsigned char[length];//创建字符指针并根据文件长度初始化。

in(0,ios::beg);//将读指针移到文件开始。

in(data,length);//将文件数据读入到字符指针data中。

(char(length>>8));

(char(length&0xff));//将文件长度值按照逆序写入到输出文件的长度字段中。

(data,length);//将data内容写入到输出文件中。

//如果输入文件长度不足B,则用补足B。

if(length<46)

{

for(int j=length;j<46;j++)

(char(0x00));

}

(char(0x00));//将数据字段后添加个

(8,ios::beg);//将读指针指向目的地址字段,从此处开始CRC计算

unsigned char ch;//ch用来保存读入的字符。

unsigned char crc=char(0x00);//余数初始值为。

while(1)//进行CRC计算

{

(ch);

if(ch==0xff)//判断是否到了文件结尾,如果是,则退出循环。

break;

for(i=0;i<8;i++)//对入读入的字符的位分别处理。

{

if(0x80==(crc&(0x80)))//当前余数最高位为,需要进行除法运算。

{

crc=(crc<<1)&(0xff);//crc左移位,最低位补。

crc=crc|((ch&0x80)>>7);//将输入数据相应的值递补到余数末位。 crc=crc^(0x07);//进行除法运算,即与除数的低位相异或。

}

else//当前余数的最高位为,不需要进行除法运算。

{

crc=(crc<<1)&(0xff);//crc左移位,最低位补。

crc=crc|((ch&0x80)>>7);//将输入数据相应位的值递补到余数末位。 }

ch=ch<<1;//读到的字符左移位,使数据下一位作为输入位。

}

}

();

(-1,ios::end);//将写指针移到输出文件的最后。

(crc);//写入crc码。

();

in();//关闭输入文件和输出文件。

cout<

}

运行结果:

运行结果如下所示:

执行framer.exe文件的结果如下所示:

实验小结:

实现帧的封装,主要是将帧的七个部分---前导码、帧前定界符、目的地址、源地址、长度字段、数据字段和校验字段,一个一个按顺序封装的,最后使得一个帧的封装得以完成。同时,在编写程序的过程中,用到了很多的函数,这些函数的运用使得程序简便而且正确的运行出来。

实验二解析IP数据包

实验目的:

?设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。

实验要求:

本实验的目标是捕获网络中的IP数据包,解析数据包的内容,见个结果显示在标准输出上,并

同时写入日志文件。

程序的具体要求如下:

?以命令行形式运行:ipparse

logfile,其中ipparse是程序名,而logfile则代表记录结果的日志文件。

?在标准输出、和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地

址和目的IP地址等内容。

?当程序接收到键盘输入Ctrl+C时退出。

设计相关知识:

IP数据报的格式说明IP协议都具有什么功能。其首部,版本目前广泛使用的版本号为4;首部长度站4bit;服务类型占8bit,其中服务类型TOS子域占4位,优先级子域占3位,另一位为保留位;总长度字段为2B,IP数据包的最大长度是65535B;标识占16bit,它是一个计数器,用来产生数据报的标识;标志占3bit,其中最低为为MF,MF=1时为后面“还有分片”,MF=0表示这是数据报片中的最后一个,DF=0时,表示允许分片;片偏移以8个字节为偏移单位;生存时间字段记为TTL,单位为秒;协议段占8bit,用于指出次数据是使用何种协议,典型的协议号有6:TCP,17:UDP,1:ICMP。

本程序使用套接字socket编程,将网卡设为能够接受流经网卡的所有类型的数据包。首先,初始化套接字,然后监听数据包,解析数据包。

SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用来创建套接字,其参数为通信发生的区字段和套接字的类型。

WSAIoctl(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen)函数用来把网卡设置为混杂模式。

recv(sock,buffer,65535,0)函数用来接收经过的IP包,其参数分别是套接字描述符,缓冲区的地址,缓冲区的大小。

typedef struct IP_HEAD

{

}}ip_head;用来定义IP头部数据。

setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *)函数用来获取本机IP地址

htons()函数将无符号短整型转换为网络字节顺序的数据

本程序在windows环境下利用C++语言编写。

实验设计分析:

为了获取网络中的IP数据包,必须对网卡进行编程,我们使用套接字进行编程。

?使用套接字

?接收数据包Array?定义IP头部的数据结构

?IP包的解析

程序流程图:

具体程序代码:

#include

#include

#include

#include

#include

#pragma comment(lib,"ws2_32") //指定连接到网络应用和internet

#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)

typedef struct IP_HEAD

{

union //定义联合

{

unsigned char Version;

unsigned char HeadLen;

};

unsigned char ServiceType;

unsigned short TotalLen;

unsigned short Identifier;

union

{

unsigned short Flags;

unsigned short FragOffset;

};

unsigned char TimeToLive;

unsigned char Protocol;

unsigned short HeadChecksum;

unsigned int SourceAddr;

unsigned int DestinAddr;

unsigned char Options;

}ip_head; //定义IP头部的数据结构

void main(int argc,char *argv[])

{

using namespace std;

ofstream outfile("C:\\log",ios::out);

if(argc!=2)

{

cout<

}

WSADATA WSAData;

if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0)

{

cout<

return;

}

SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP); //三个参分别为通信发生的区字段,套接字的类型,与IP协议

if(sock==INVALID_SOCKET)

{

cout<

closesocket(sock);

WSACleanup();

}

BOOL flag=TRUE;

if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *) &flag,sizeof(flag))==SOCKET_ERROR)

{

cout<

closesocket(sock);

WSACleanup();

}

char hostName[128];//获取主机名

if(gethostname(hostName,100)==SOCKET_ERROR)

{

cout<

closesocket(sock);

WSACleanup();

}

hostent *pHostIP; //获取本地IP

if((pHostIP=gethostbyname(hostName))==NULL)

{

cout<

closesocket(sock);

WSACleanup();

}

sockaddr_in host_addr;//

host_addr.sin_family=AF_INET;

host_addr.sin_port=htons(6000);

host_addr.sin_addr=*(in_addr *)pHostIP->h_addr_list[0];

if(bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr))==SOCKET_ERROR)

{

cout<

closesocket(sock); //绑定网卡

WSACleanup();

}

DWORD dwBufferLen[10];

DWORD dwBufferInLen=1;

DWORD dwBytesReturned=0;

if(WSAIoctl(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen) , &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)==SOCKET_ERROR)

{

cout<

closesocket(sock); //将网卡设为混杂模式,以接受所有数据

WSACleanup();

}

cout<

char buffer[65535]; //设置缓冲区

int packsum=atoi(argv[1]); //字符串转换为整形

for(int i=0;i

{

if(recv(sock,buffer,65535,0)>0) //四个参数分别是套接字描述符,缓冲区的地址,缓冲区大小,附加标志

{

ip_head ip=*(ip_head *)buffer;

cout<<"-----------------------"<

cout<<"版本:"<<(ip.Version>>4)<

cout<<"头部长度:"<<((ip.HeadLen &0x0f)*4)<

cout<服务类型:Priority"<<(ip.ServiceType>>5)<<", Service"<<((ip.ServiceType>>1)&0x0f)<

cout<<"总长度:"<

cout<<"标识符:"<

cout<<"标志位:"<<((ip.Flags>>15)&0x01)<<",DF= "<<((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)<

cout<<"片偏移:"<<(ip.FragOffset&0x1fff)<

cout<<"生存周期:"<<(int)ip.TimeToLive<

cout<<"协议:Protocol"<<(int)ip.Protocol<

cout<<"头部校验和:"<

cout<<"原地址:"<

cout<<"目的IP地址:"<

outfile<<"-----------------------"<

outfile<<"版本:"<<(ip.Version>>4)<

outfile<<"头部长度:"<<((ip.HeadLen &0x0f)*4)<

outfile<<"服务类型:Priority"<<(ip.ServiceType>>5)<<", Service"<<((ip.ServiceType>>1)&0x0f)<

outfile<<"总长度:"<

outfile<<"标识符:"<

outfile<<"标志位:"<<((ip.Flags>>15)&0x01)<<",DF= "<<((ip.Flags>>14)&0x01)<<",Mf="<<((ip.Flags>>13)&0x01)<

outfile<<"片偏移:"<<(ip.FragOffset&0x1fff)<

outfile<<"生存周期:"<<(int)ip.TimeToLive<

outfile<<"协议:Protocol"<<(int)ip.Protocol<

outfile<<"头部校验和:"<

outfile<<"原地址:"<

outfile<<"目的IP地址:"<

}

}

closesocket(sock);

WSACleanup();

}

程序运行结果:

程序编译运行后:

以命令行形式运行程序ipparse:

同时在程序所在的文件夹中生成了名为log文件,里面记录了上面显示的内容。

试验小结:

IP数据报的格式说明了IP协议都具有什么功能,因为完全不知道如何使用套接字socket()函,查阅了相关资料,了解了IP数据报的各种位与协议的概念和意义,通过解析IP数据包这个实验,基本掌握了用套接字编程来实现获取并解析IP数据包的方法。

实验三发送TCP数据包

实验目的:

?设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与I P协议的关系,使大家对TCP协议的工作原理有更深入的认识。

?

实验要求:

本程序的功能是填充一个TCP数据包,并发送给目的主机。

?以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port

其中SendTCP为程序名;source_ip为源IP地址; source_port为源端口; dest_ip为目的IP地址;dest_port为目的端口。

?其他的TCP头部参数自行设定。

?数据字段为“This is my homework of network!”.

?成功发送后在屏幕上输出“send OK”。

课程设计分析:

?使用原始套接字

?定义IP头部、TCP头部和伪头部的数据结构

?填充数据包

?发送数据包

设计思想:

本课程设计的目标是发送一个TCP数据包,可以利用原始套接字来完成这个工作。整个程序由初始化原始套接字和发送TCP数据包两个部分组成。

创建一个原始套接字,并设置IP头选项

SOCKET sock;

sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);

或者:

sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED); 设置SOCK_RAW标志,表示我们声明的是一个原始套接字类型。

为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。其中fl ag设置为ture,并设定IP_HDRINCL 选项,表明自己来构造IP头。注意,如果设置IP_HDRINCL 选项,那么必须具有administrator权限,要不就必须修改注册表:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameter\

修改键:DisableRawSecurity(类型为DWORD),把值修改为 1。如果没有,就添加。

BOOL Flag=TRUE;

setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag));

int timeout=1000;

setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, sizeof(timeout));

在这里我们使用基本套接字SOL_SOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时时间设置为1000ms。

构造IP头和TCP头

这里, IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。

计算校验和的子函数

在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头和TCP头部(加上伪头部),其实现代码如下:

USHORT checksum(USHORT *buffer, int size)

{

unsigned long cksum=0;

while(size >1)

{

cksum+=*buffer++;

size -=sizeof(USHORT);

}

if(size )

{

cksum += *(UCHAR*)buffer;

}

cksum = (cksum >> 16) + (cksum & 0xffff);

cksum += (cksum >>16);

return (USHORT)(~cksum);

}

程序流程图:

源程序代码:

#include

#include

#include

#include

#include

#include

#include

#include

#pragma comment(lib,"ws2_32.lib")

#define IPVER 4 //IP协议预定

#define MAX_BUFF_LEN 65500 //发送缓冲区最大值

typedef struct ip_hdr //定义IP首部

{

UCHAR h_verlen; //4位首部长度,4位IP版本号UCHAR tos; //8位服务类型TOS USHORT total_len; //16位总长度(字节)USHORT ident; //16位标识

USHORT frag_and_flags; //3位标志位

UCHAR ttl; //8位生存时间 TTL

UCHAR proto; //8位协议 (TCP, UDP 或其他) USHORT checksum; //16位IP首部校验和ULONG sourceIP; //32位源IP地址

ULONG destIP; //32位目的IP地址

}IP_HEADER;

typedef struct tsd_hdr //定义TCP伪首部

{

ULONG saddr; //源地址

ULONG daddr; //目的地址

UCHAR mbz; //没用

UCHAR ptcl; //协议类型

USHORT tcpl; //TCP长度

}PSD_HEADER;

typedef struct tcp_hdr //定义TCP首部

{

USHORT th_sport; //16位源端口

USHORT th_dport; //16位目的端口ULONG th_seq; //32位序列号

ULONG th_ack; //32位确认号

UCHAR th_lenres; //4位首部长度/6位保留字UCHAR th_flag; //6位标志位USHORT th_win; //16位窗口大小USHORT th_sum; //16位校验和USHORT th_urp; //16位紧急数据偏移量}TCP_HEADER;

//CheckSum:计算校验和的子函数

USHORT checksum(USHORT *buffer, int size)

{

unsigned long cksum=0;

while(size >1)

{

cksum+=*buffer++;

size -=sizeof(USHORT);

}

if(size)

{

cksum += *(UCHAR*)buffer;

解析IP数据包课程设计

课程设计任务书

目录1.实验目的2.实验要求3.预备知识4.课程设计分析5.实现过程6.程序流程图7.相关扩展8.实习体会9.参考文献

一.实验目的: 设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而IP层的工作原理有更好的理解和认识. 二.实验要求: 本设计的目标是捕获网络中数据包,解析数据包的内容,将、结果显示在标准输出上,并同时写入日志文件. 程序的具体要求如下: 3)以命令行形式运行:ipparse logfile,其中ipparse是程序名,而logfile则代表记录结果的日 志文件. 4)在标准输出和日志文件中写入捕获的IP数据包的版本,头长度,服务类型,数据包总长度, 数据包标识,分段标志,分段偏移值,生存时间,上层协议类型,头校验和,源IP地址和目的IP地址等内容. 当程序接收到键盘输入Ctrl+C时退出. 三.预备知识 互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解,图1给出了IP协议的数据包格式. IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析. 报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B之间,是可变的. 0 4 8 16 19 24 图1 IP数据包的格式 服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示. B7 b6 b5 b4 b3 b2 b1 b0

TCPIP实验之IP数据包分析--

TCP/IP协议与编程实验 姓名: 班级: 学号: 实验题目用Wireshark抓包分析ip数据包 一、实验目的 1、了解并会初步使用Wireshark,能在所用电脑上进行抓包 2、了解IP数据包格式,能应用该软件分析数据包格式 3、查看一个抓到的包的内容,并分析对应的IP数据包格式 二、实验内容 Wireshark 是网络包分析工具。网络包分析工具的主要作用是尝试捕获网络包,并尝试显示包的尽可能详细的情况。 实验步骤: 1、打开wireshark,选择接口选项列表。或单击“Capture”,配置“option” 选项。

2、设置完成后,点击“start”开始抓包: 3、显示结果: 3、选择某一行抓包结果,双击查看此数据包具体结构。

4、捕捉IP数据报。 ① 写出IP数据报的格式。 IP数据报首部的固定部分中的各字段含义如下: (1)版本占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。 (2)首部长度占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60 字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部

3)区分服务占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务 DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。 (4)总长度总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。长度就是20字节(即首部长度为0101),这时不使用任何选项。 (5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。 (6)标志(flag) 占3位,但目前只有2位有意义。 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。 7)片偏移占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8 个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。 (8)生存时间占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。 #TTL通常是32或者64,scapy中默认是64 (9)协议占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。(在scapy中,下层的这个protocol一般可以从上曾继承而来,自动填充,我们一般可以省略不填此项) (10)首部检验和占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和

实验4_IP协议分析

实验4 IP协议分析 在这个实验里,我们将研究IP协议,通过执行traceroute程序来分析IP数据包发送和接收的过程。我们将研究IP数据包的各个字段,详细学习IP数据包的分片。 一、捕获traceroute 为了产生一个IP数据包,我们将使用traceroute程序来向一些目的地发送不同大小的数据包,这个软件我们在第一个实验已作过简单的尝试了。 但我们试图在IP头部首先发送一个或者更多的具有TTL的数据包,并把TTL的值设置为1;然后向同一个目的地发送一系列具有TTL值为2的数据包;接着向同一个目的地发送一系列具有TTL值为3的数据包等等。路由器在每次接收数据包时消耗掉一个TTL,当TTL达到0时,路由器将会向源主机返回一个ICMP的消息(类型为11的TTL溢出),这样一个TTL值为1的数据包将会引起路由器从发送者发回一个ICMP的TTL溢出消息产生一跳,TTL值为2的数据包发送时会引起路由器产生两跳,TTL值为3的数据包则会引起路由器产生3跳。基于这种方式,主机可以执行traceroute观察ICMP的TTL溢出消息,记录每个路由器的ICMP的溢出消息的源IP地址,即可标识出主机和目的地之间的所有路由器。 我们要运行traceroute让它发送多种长度的数据包,由Windows提供的tracert程序不允许改变由tracert程序发送的ICMP的回复请求消息的大小,在Windows下比较好的一个是pingplotter,它可以在以下网站下载共享版本(现在已下载好存在共享文件夹的压缩包中): 安装pingplotter标准版(你有一个30天的试用期),通过对你所喜欢的站点执行一些traceroute来熟悉这个工具。ICMP回复请求消息的大小可以在pingplotter中设置:Edit-> Options->Default Setting->enginet,在packet size字段中默认包的大小是56字节。pingplotter 发送一系列TTL值渐增的包时,Trace时间间隔的值和间隔的个数在pingplotter中能够设置。按下面步骤做: 1启动Iris,开始包捕获; 2启动pingplotter,然后在“Address to Trace”窗口输入目的地目标的名字: 172.16.1.1 (1岛输入172.16.6.1) 在“# of times to Trace”区域输入3。然后选择Edit-> Options->Default Setting->engine,确认在packet size字段的值为56,点OK。然后按下 Trace按钮。你看到的pingplotter窗口类似如上:

解析IP数据包课程设计报告

成绩评定表

课程设计任务书

目录 1 课程设计目的 (1) 2 课程设计要求 (2) 3 相关知识 (3) 4 课程设计分析 (6) 5 程序代码 (11) 6 运行结果与分析 (18) 7 参考文献 (18)

1 课程设计目的 IP数据包是网络成传输的基本数据单元,熟悉IP数据包结构对于理解网络工作原理具有重要意义。本课程设计的主要目的是通过接受与解析IP数据包,了解IP数据包的基本结构与IP协议的基本功能。

2 课程设计要求 根据后面介绍的IP数据包结构,编写程序接收并解析IP数据包。 1)以命令行形式运行; ParsePacket log_file 其中,ParsePacket为程序名,log_file为日志文件名。 2)输出内容:IP数据包的各字段值,包括版本、头部长度、服务类型、总长度、标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址 和目的IP地址等。 3)当程序接收到键盘输入Ctrl+C时退出。

3相关知识 互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP 协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解,图1给出了IP 协议的数据包格式. IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析. 报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B之间,是可变的. 0 4 8 16 19 24 31(位) 图3.1 IP数据包的格式 服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示. 图3.1 服务类型字段结构

IP及IPSEC协议数据包的捕获与分析

IP及IPSEC协议数据包的捕获与分析

IP及IPSEC协议数据包的捕获与分析 为了掌握掌握IP和IPSEC协议的工作原理及数据传输格式,熟悉网络层的协议。我进行了以下实验:首先用两台PC互ping并查看其IP报文,之后在两台PC上设置IPSEC互ping并查看其报文。最终分析两者的报文了解协议及工作原理。 一、用两台PC组建对等网: 将PC1与PC2连接并分别配置10.176.5.119和10.176.5.120的地址。如图1-1所示。 图1-1 二、两PC互ping: IP数据报结构如图1-2所示。 图1-2 我所抓获的报文如图1-3,图1-4所示:

图1-3 请求包 图1-4 回应包 分析抓获的IP报文: (1)版本:IPV4 (2)首部长度:20字节 (3)服务:当前无不同服务代码,传输忽略CE位,当前网络不拥塞

(4)报文总长度:60字节 (5)标识该字段标记当前分片为第1367分片 (6)三段标志分别指明该报文无保留、可以分段,当前报文为最后一段 (7)片偏移:指当前分片在原数据报(分片前的数据报)中相对于用户数据字段 的偏移量,即在原数据报中的相对位置。 (8)生存时间:表明当前报文还能生存64 (9)上层协议:1代表ICMP (10)首部校验和:用于检验IP报文头部在传播的过程中是否出错 (11)报文发送方IP:10.176.5.120 (12)报文接收方IP:10.176.5.119 (13)之后为所携带的ICMP协议的信息:类型0指本报文为回复应答,数据部分 则指出该报文携带了32字节的数据信息,通过抓获可看到内容为:abcdefghijklmnopqrstuvwabcdefghi 三、IPSec协议配置: 1、新建一个本地安全策略。如图1-5。 图1-5 2、添加IP安全规则。如图1-6.

计算机网络课程设计-IP数据包解析实验报告

< 解析IP数据报实验报告 - … (

目录 目录 (2) 1、课程设计目的 (2) 2、课程设计要求 (2) < 3、相关知识 (2) 4、课程设计分析 (6) 网卡设置 (6) 使用套接字 (7) 接收数据包 (7) 定义IP头部的数据结构 (8) IP包的解析 (9) 协议的定义 (9) ; 捕获处理 (9) 5、运行结果 (10) 6、总结 (11) 7、课程设计参考资料 (11) 8、源程序代码 (11) , /

, 1、课程设计目的 本课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。 2、课程设计要求 本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。 程序的具体要求如下: 1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile 则代表记录结果的日志文件。 2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。 3)当程序接收到键盘输入Ctrl+C时退出。 3、相关知识 互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族

中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解,图1给出了IP协议的数据包格式. - IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析. 报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B之间,是可变的. 0 4 8 16 19 24 31 图1 IP数据包的格式 服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务

解析IP数据包课程设计

课程设计任务书 目录 1.实验目的 2.实验要求 ) 3.预备知识 4.课程设计分析 5.实现过程 6.程序流程图 ! 7.相关扩展 8.实习体会

9.参考文献 一.实验目的: 设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相 关问题,从而IP层的工作原理有更好的理解和认识. 、 二.实验要求: 本设计的目标是捕获网络中数据包,解析数据包的内容,将、结果显示在标准输出上, 并同时写入日志文件. 程序的具体要求如下: 3)以命令行形式运行:ipparse logfile,其中ipparse是程序名,而logfile则代表记录 结果的日志文件. 4)在标准输出和日志文件中写入捕获的IP数据包的版本,头长度,服务类型,数据包总长 度,数据包标识,分段标志,分段偏移值,生存时间,上层协议类型,头校验和,源IP地址 和目的IP地址等内容. 当程序接收到键盘输入Ctrl+C时退出. ~ 三.预备知识 互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地 位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送 方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解, 图1给出了IP协议的数据包格式. IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要 针对版本是IPV4的数据包的解析. 报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在20—40B 之间,是可变的. 0 4 8 16 19 24 31

解析ip数据包

目录 一、课程设计的目的 (1) 二、课程设计要求 (1) 三、需求分析 (1) 1.先对网卡进行编程,以便连接IP层的数据包。 (1) 2.预先创建一个logfile文件来保存所解析的IP数据包。 (1) 3.使用recv函数实现接收数据包的功能。 (1) 四、设计分析 (1) 4.1 网卡设置 (1) 4.2 使用套接字 (2) 五、程序测试 (3) 六、小结 (5) 七、附录 (5)

一、课程设计的目的 本章课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。 二、课程设计要求 本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。 程序的具体要求如下: 1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile 则代表记录结果的日志文件。 2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。 3)当程序接收到键盘输入Ctrl+C时退出。 三、需求分析 1.先对网卡进行编程(使用套接字进行编程),以便连接IP层的数据包。 2.预先创建一个logfile文件来保存所解析的IP数据包。 3.使用recv函数实现接收数据包的功能。 4.编写ipparse函数解析捕获的数据包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。 四、设计分析 4.1 网卡设置

ip数据包的捕获与解析代码

// PackCaptureDlg.h:header file #define IPV4_WERSION 4 #define IPV6_WERSION 6 #define ICMP_PACKET 1 #define IGMP_PACKET 2 #define TCP_PACKET 6 #define EGP_PACKET 8 #define UDP_packet 17 #define OSPF_PACKET 89 class CPackCaptureDlg:public CDialog { public: //{{AFX_DATA(CFindHostDlg) enum {IDO=IDO_PACKCAPTURE_DIALOG}; int m_Count; CString m_Packet; //}}AFX_DATA protected: //{{AFX_MSG(CFindHostDlg) afx_msg void OnCapture(); //}}AFX_MSG private: typedef struct IP_HEAD //IP头部结构 { union { unsigned char Version; //版本(字节前四位) unsigned char HeadLen; //头部长度(字节后四位) }; unsigned char ServiceType; //服务类型 unsigned short TotalLen; //总长度 unsigned short Identifier; //标识符 union { unsigned short Flags; //标志位(字前三位) unsigned short FragOffset;

解析IP数据包实验报告讲解

成都工业学院(课程设计实验报告) 院系: 计算机工程系 课程名称: 计算机网络 设计名称: 解析IP数据包 专业名称:网络工程 班级: 1305022 姓名:牟黎明 学号: 11 指导老师: 刘枝盛老师 成绩: 设计时间:2014年12月22日—2014年12月26日

成都工业学院课程设计任务书 指导教师(签名):

目录 一、课程设计的目的和意义 (3) 二、课程设计的内容和要求 (3) 三、解析IP数据包设计的相关技术 (4) ● 3.1 IP数据包的格式与分析 (4) ● 3.2 程序分析设计 (6) ● 3.2.1 网卡设置 (6) ● 3.2.2 程序设计 (6) ● 3.2.3 程序设计 (7) ● 3.2.4 程序设计 (7) ● 3.2.5 程序设计 (7) 四、课程设计过程 (8) ● 4.1 程序流程图 (8) ● 4.2源程序代码 (9) ● 4.3 程序运行结果 (16) ● 4.3.1.登陆界面,提示输入命令符 (16) ● 4.3.2.命令符输入错误后提示界面 (16) ● 4.3.3.截获的IP数据包界面 (17) ● 4.3.4.继续抓包图 (17) 五、课程设计小结 (18) 参考文献 (18)

一、课程设计的目的和意义 目的: 本章课程设计的目的就是设计一个解析IP数据包的程序(我的编辑环境为visual2102),并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对网络层的工作原理有更好的理解和认识。 意义: 1、有利于编程能力的提高 在做设计的过程中,我再一次熟悉了开发设计的基本流程,从分析任务到确立整体框架再到确定算法,然后再一步步实现各函数的功能。从中,我熟悉了许多新的库函数,并提高了编程技巧。 2、有利于基础知识的理解 在这次课程设计之前,我们已经学完了网络层的理论知识,可是对它的理解很粗浅。之前只知道关于网络层的一些概念性的东西。可是做完设计后,我才从整体上理解了网络层的框架,明白了网络层的每一个组成部分都是有它特定的功能和意义的,从而对网络层协议有了更深入的理解。 3、有利于逻辑思维的锻炼 程序设计能直接有效地训练我们的创新思维,培养分析问题、解决问题的能力。即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。 二、课程设计的内容和要求 本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。 程序的具体要求如下: 1)打开本程序,根据提示,输入命令符ParsePacket,开始抓包。获取经过本机的ip数据。若输入错误,将退出重新打开才行。

ip数据包解析实验报告摘要doc

ip数据包解析实验报告摘要篇一:解析IP数据包实验报告 成都工业学院 (课程设计实验报告) 院系: 计算机工程系 课程名称: 计算机网络 设计名称: 解析IP数据包 专业名称: 网络工程 班级: 1305022 姓名: 牟黎明 学号: 11 指导老师:刘枝盛老师 成绩: 设计时间:XX年12月22日—XX年12月26日成都工业学院课程设计任务书 指导教师(签名): 目录

一、课程设计的目的和意义...............................................3 二、课程设计的内容和要求..............................................3 三、解析IP数据包设计的相关技术 (4) ? 3.1 IP数据包的格式与分析 ? 3.2 程序分析设计......................................................4 .. (6) (6) (6) (7) (7) ……………………….…………..…………….7 ? 3.2.1 网卡设置? 3.2.2 程序设计? 3.2.3 程序设计? 3.2.4 程序设计? 3.2.5 程序设计 四、课程设计过程 (8) ? 4.1 程序流程图

? 4.2源程序代码 (8) (16) ……………….……………..............……………….9 ? 4.3 程序运行结果 ? 4.3.1.登陆界面,提示输入命令符 (16) ? 4.3.2.命令符输入错误后提示界面 (16) ? 4.3.3.截获的IP数据包界面 (17) ? 4.3.4.继续抓包图 (17) 五、课程设计小结 (18) 参考文献 (18) 一、课程设计的目的和意义

计算机网络课程设计IP数据包解析

目录 1、课程设计目的 (1) 2、课程设计要求 (2) 3、程序设计分析 (2) 3.1 网卡设置 (2) 3.2 使用套接字 (2) 3.2.接收数据包 (3) 3.3 定义IP头部的数据结构 (3) 3.4 IP包的解析 (4) 3.5 协议的定义 (4) 3.6捕获处理 (5) 4、运行结果 (5) 5、总结 (6) 6、课程设计参考资料 (6) 7、源程序代码 (8)

1、课程设计目的 本章课程设计的目的就是设计一个解析IP数据包的程序,并根据这个程序,说明IP数据包的结构及IP协议的相关问题,从而对IP层的工作原理有更好的理解和认识。 2、课程设计要求 本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。 程序的具体要求如下: 1)以命令行形式运行:ipparse logfile,其中ipparse是程序名, 而logfile 则代表记录结果的日志文件。 2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。 3)当程序接收到键盘输入Ctrl+C时退出 3、程序设计分析 3.1 网卡设置 为了获取网络中的IP数据包,必须对网卡进行编程,在这里使用套接字(socket)进行编程。但是,在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的数据包或是以广播形式发出的数据包。对于其他形式的数据包,如已到达网络接口,但却不是发送到此地址的数据包,网络接口在骓投递地

址并非自身地址之后将不引起响应,也就是说应用程序无法收取与自己无关的数据包。我们要想获取网络设备的所有数据包,就是需要将网卡设置为混杂模式。 3.2 使用套接字 套接字分为三种,即流套接字(Stream socket)、数据报套接字(Datagram Socket) 和原始套接字(Raw Socket)。要进行IP层数据包的接收和发送,应使用原始套接字。创建原始套接字的代码如下: Socket sock: Sock=wsasocket(af_inet,sock_raw,ipproto-ip,null,0,wsa-fl ag-overlapped): 本设计不用考虑超时情况。 创建套接后,IP头就会包含在接收数据包中。然后,我可以设置IP头操作选项,调用setsockopt函数。其中flag设置为true,并设定IP-HDRINCL选项,表明用户可以亲自对IP头进行处理。最后使用bind()函数将socket绑定到本地网卡上。绑定网卡后,需用WSAIoctl()函数把网卡设置为混杂模式,使网卡能够接收所有的网络数据。如果接收的数据包中的协议类型和定义的原始套接字匹配,那么接收的数据就拷贝到套接字中,因此,网卡就可以接收所有经过的IP 包。 3.2.2 接收数据包 在程序中可使用recv()函数接收经过的IP包。该函数有四个参数,第一个参数接收操作所用的套接字描述符;第二个参数接收缓冲区的地址;第三个参数接收缓冲区的大小,也就是所要接收的字节数;第四个参数是一个附加标志,如

计算机网络课程设计_IP数据包的捕获与分析

计算机网络课程设计报告

目录 第一章课程设计的目的与要求 .......................... 错误!未定义书签。 1.1 课程设计的目的 ................................... 错误!未定义书签。 1.2 课程设计的要求 (1) 第二章课程设计的内容 (3) 2.1 课程设计的内容 (3) 2.2 内容的要求 (3) 第三章程序分析与设计 (4) 3.1 IP数据包 (4) 3.1.1 IP数据包的格式说明 (4) 3.1.2 IP数据包的格式 (4) 3.1.3 IP数据包的C++定义 (5) 3.1.4 IP数据包的解析 (6) 3.2 套接字 (7) 3.1.4 套接字的使用 (7) 3.1.4 使用原始套接字 (7) 3.3 接受数据包 (7) 第四章实验结果 (10) 4.1 程序截图 (10) 第五章总结 (11) 5.1 实验心得 (11) 第六章附录 (12) 6.1 源代码 (12)

第一章课程设计的目的与要求 1.1 课程设计的目的 计算机网络课程设计的目的,是为了让学生更深入地掌握计算机网络的核心内容,实现理论与实践相结合。让学生用具体的实践成果,体现对理论知识的掌握程度。有利于学生提高计算机网络的实践能力,加深对计算机网络理论知识的理解。 1.2 课程设计的要求 (1)编写程序,实现系统的基本功能,鼓励自行增加新功能; (2)要有用户界面:要求至少采用文本菜单界面;鼓励采用图形菜单界面; (3)写课程设计报告,内容包括: ●封面(参见附录I) ●需求分析:以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?给出 功能模块图和流程图。同时明确规定:输入的形式和输出值的范围;输出的形式; 程序所能够达到的功能;测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。 ●概要设计:包括程序设计组成框图,程序中使用的存储结构设计说明(如果指定 存储结构请写出该存储结构的定义)。 ●详细设计:包括模块功能说明(如函数功能、入口及出口参数说明,函数调用关 系描述等),每个模块的算法设计说明(可以是描述算法的流程图)。其中源程序要按照写程序的规则来编写,结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 ●运行结果:包括典型的界面、输入和输出数据等; ●总结:包括课程设计中遇到的问题,解决问题的过程及体会、收获、对课程设计 的认识与思考等。 ●附录:包括主要程序清单,要有适当的注释,使程序容易阅读。 (4)课程设计报告书写规范参见附录II,不按照规范书写的,成绩不能评为“优”或“良”。 (5)无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、 1

计算机网络 ip数据包解析

目录 1.需求分析---------------------------------------------------------------------1 2.总体设计---------------------------------------------------------------------1 3.详细设计---------------------------------------------------------------------2 4.源程序------------------------------------------------------------------------6 5.运行结果----------------------------------------------------------------------12 6.实验总结-----------------------------------------------------------------------14 7.参考资料-----------------------------------------------------------------------14

一.需求分析 本设计的目标是捕获网络中的IP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。 程序的具体要求如下: 1)以命令行形式运行:hhb logfile,其中hhb是程序名, 而logfile则代表记录结果的日志文件。 2)在标准输出和日志文件中写入捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。3)当程序接收到键盘输入Ctrl+C时退出 二.总体设计 为了获取网络中的IP数据包,必须对网卡进行编程,我们使用套接字进行编程。 ?使用套接字 ?接收数据包 ?定义IP头部的数据结构 ?IP包的解析 程序流程图:

ip数据报解析源地址目的地址

青岛农业大学 理学与信息科学学院 计算机网络综合实习报告 题目IP数据报解析源地址/目的地址专业计算机科学与技术 学号 姓名 指导教师 日期2014年11月8日

目录 一、设计任务和目的........................................................................................................................ - 2 - 二、设计要求.................................................................................................................................... - 2 - 三、设计内容.................................................................................................................................... - 2 - 3.1原理概述: ..................................................................................................................................... - 2 - 3.1.1 点分十进制表示法:...................................................................................................... - 2 - 3.1.2 IP数据报格式: ........................................................................................................... - 2 - 3.2 运行结果及分析......................................................................................................................... - 4 - 3.2.1程序运行及截图............................................................................................................... - 4 - 3.2.2 分析.................................................................................................................................. - 5 - 四、设计方案改进及建议................................................................................................................ - 5 - 五、总结体会.................................................................................................................................... - 5 - 六、主要参考文献............................................................................................................................ - 6 - 七、附录............................................................................................................................................ - 6 - 附录1 程序流程图........................................................................................................................... - 6 - 附录2 程序源代码及解释............................................................................................................... - 7 -

IP数据包的分析实例

IP数据包的分析实例 我们知道,使用Ethereal 软件可以方便地帮助我们进行抓取网络中的数据包,具体怎样利用它分析一个特定的包呢?我在网上找了半天,发现相关的分析IP包的文章很少,在此,我将自己在学习使用该软件抓取IP包并分析的过程描述如下,供初学者入门之用,有分析不对的地方欢迎指正。最后附上简单介绍Ethereal使用方法文章,详细使用手册可以在网上查询。 要分析IP包,首先要知道IP包的包头格式,各种计算机网络的书籍都有介绍,必须了解该协议分析包才有意义,IPv4首部一般是20字节长,该协议如下: 下面使用Ethereal抓取一个特定的IP包,然后根据该协议分析该IP包。 使用Ethereal抓取的IP包如下: 我用不同的框框划分出来了,便于分析。 首先,开始的6字节+ 6字节+ 2字节不属于IP包包头本身。 (1)“ 00 e0 4c 5f 97 1b ” 目的主机的MAC地址 (2)“ 00 1a 4d 28 62 ff ” 源主机的MAC地址: (3)“08 00 ”包类型:08 00 为IP包 后面的开始为真正的IP包包头,可以根据上面的协议进行分析了。 (4)“45”,其中“4”是IP协议的版本(Version),说明是IP4 “5”指本IP包的包头长度为5X4 = 20 字节 (5)“00”服务类型(Type of Service) (6)“00 40”是IP数据报文总长,包含头部以及数据,这里表示4X16 = 64字节(注:00 40为16进制表示)

(7)" 62 06 "、" 40 00 " 表示认证、标志、段偏移:主要用于数据报的分段 (8)" 40" 表示一个IP数据流的生命周期,用Ping显示的结果,能得到TTL的值,很多文章就说通过TTL位来判别主机类型。因为一般主机都有默认的TTL值,不同系统的默认值不一样. (9)" 06 " 很重要,表示传输层的协议类型(Protocol),06表示TCP协议 (10)"8b e5" 为校验和 (11)"c0 a8 0c 34" 源地址的IP :即192.128.12.52 (12)"79 c2 06 2e"目的地址的IP:即121.194.6.46 后面接着的就是IP的数据内容了,IP包包头分析就到此为止,其实分析包头并不难,UDP、ARP包的分析可以按照本文的思路,按照协议一一分析即可。

分析IP协议数据包格式

实验名称: 分析IP协议数据包格式 实验目得: 掌握IP协议得作用与格式; 理解IP数据包首部各字段得含义; 掌握IP数据包首部校验与得计算方法。 实验器材: 计算机及以太网环境。 实验内容(步骤): 1.打开Wireshark软件,选择菜单命令“Capture” “Interfaces…”子菜单项。 弹出“Wireshark:CaptureInterfaces”对话框。单击“Options”按钮,弹出“Wi reshark:Capture Options”对话框。单击“Start”按钮开始网络数据包捕获。 2.浏览外部网站,确保协议分析软件能够捕获足够得网络数据包,单击“Stop”按钮, 中断网络协议分析软件得捕获进程,主界面显示捕获到得数据包。 几乎所有得高层协议都使用IP协议进行网络传输,只有ARP与RARP报文不被封装在IP数据报中。 3.观察协议树区中IP数据包各个字段得长度与值,就是否符合IP报文格式。

对帧61得IP数据包进行分析 Internet Protocol互联网协议(IP)源:61、135、163、233,目标:192、168、 1、2 Version(版本):一个4字节得字段.表示当前正运行得IP版本信息。上图中版本得信息就是IPv4. Headerlength IP(报头长度):一个4字节得字段,表示以32比特为单位得信息中数据包报头得长度。这就是所有报头信息得总长度。上图为20字节 Differentiated services Filed(服务得类别):一个8字节得字段,表示一个特定得上层协议所分配得重要级别。 Differentiated Services Codepoint(差分服务代码点6位):默认得DSCP 值就是0,相当于尽力传送。 two-bit ExplicitCongestion Notification field(2位明确得拥塞通知字段) ECN-Capable Transport:(ECN Explicit Cogestion Notification -CapableTransport):显式拥塞指示能力传输字段, 该ECN-Capable Transport(ECT) bit将被数据发送者设置,以表明传输协议得末端节点有ECN得能力。

相关主题