IP首部校验实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }