IP首部校验实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机网络实验报告

实验名称:ip首部校验报告人:

学号:成绩:

【实验要求】:

根据wireshark在网上抓包,计算IP首部(16进制),输出数据是否在传输中出错。

【实验原理】:

将IP数据报文的首部部分的L个16比特构成的16进制数转换成2进制相加,将求得的和模(1621 ),将高于第15比特的各位取出,往后移16位,并把它们加回到和中。将所得和取补码并判断是否为0,若为0则数据没有出错;若不为0,则数据传输出错。

【程序交流】:

将L个16比特构成的16进制数文件读入,直接将这些数进行16进制加法,将超出4位的16进制数取出。向后移4位,加到和中。若最后的和为ffff,则数据没有出错;否则数据传输出错。

源代码在附录中。

【测试结果】:

输入“input.txt”

45 00 00 30 80 4c 40 00 80 06 b5 2e d3 43 11 7b cb 51 15 3d

输出:

将b5 2e 改为c5 2e 则输出:

附录:

#include

#include

#include

using namespace std;

char a[21][4];

string s;

int change(char ch)

{

int b;

if(ch>='0'&&ch<='9')

b=ch-'0';

else

b=ch-'a'+10;

return b;

}

int main()

{

int i=0,j=0,k=0,len,num,sum[6]= {0},temp=0;

char ch;

ifstream fin;

fin.open("input.txt");

getline(fin,s);

while(s[i]!='\0')

i++;

len=i;

i=0;

while(i<=len)

{

if(k!=4)

{

if(s[i]==' ')i++;

else

{

a[j][k]=s[i];

k++;

i++;

}

}

if(4==k)

{

i++;

j++;

k=0;

}

}

k=0;

for(i=3; i>=0; i--)

{

for(j=0; j<10; j++)

{

ch=a[j][i];

num=change(ch);

sum[k]+=num;

}

k++;

}

for(i=0; i<5; i++)

{

sum[i]+=temp;

if(sum[i]>15)

{

temp=sum[i]/16;

sum[i]=sum[i]%16;

}

else

temp=0;

}

sum[0]+=sum[4];

k=0;

for(i=0;i<4;i++)

{

if(sum[i]!=15){k=1;break;} }

if(k==1)cout<<"wrong"<

else cout<<"correct"<

return 0;

}

相关文档
最新文档