- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告(3)
——首部检验和的编程实现
实验人员
二、实验内容和要求
(一)实验内容
编写一个计算IP报文中首部校验和的程序,并且通过抓包随机选择一个数据报,提取出IP报文首部部分,根据程序计算出校验和的计算值,与报文中检验和对比,检验程序的正确性,计算结果为0保留数据报,否则丢弃。
(二)实验要求
1.掌握IP数据报的结构,通过wireshark抓包随机选择一个TCP数据报,提取IP报部分,并找到首部。
2.学习理解并运用IP首部校验和的计算算法,通过程序实现。
三、实验环境
Wireshark抓包工具
Microsoft visual studio 2010 C#
四、实验过程与结果分析
(一)实验过程
1.利用wireshark抓包分析包格式并提取IP首部
(1)IP数据报格式
如图1,IP数据报的首部为前20字节。因为首部校验和的计算只需要IP数据报的首部20个字节即可,数据部分不参加运算。所以只需要把IP数据包中的前20个16进制数提取出来作为运算的数据即可。
图 1 IP数据包格式
(2)抓包得到的数据报
图 2 TCP数据报
如图2,通过wireshark抓包,随机选择一个TCP数据报,根据TCP数据报的格式,我们分析数据报内容可以知道:首先开始6个字节为目的mac地址,后面6个字节为目的mac地址,后面2个字节为协议类型为0800,是IP协议包。所以再后面的20个字节就是IP数据报的首部部分。也就是实验所需要的数据。
IP首部为:450000280000400034060ab73baf84710a687191
并且,通过包的计算的校验和结果,此包被留下,校验和的值为0。也是座位后面对设计程序计算得到结果的一个验证。
2.设计计算首部校验和的的算法
(1)程序设计的函数模块关系
(2)算法流程
首先将IP首部即40位16进制的字符串转化为二进制字符串,然后以每16位为一个字段,分为10个二进制字段。存放在IP1~IP10字符串中;
然后求出每个字段的反码,根据IP数据报格式,可以知道IP6存放的就是校验和,将校验和IP6置位全0;
利用求反码和方法FanMa(),求出10个字段反码相加后的值string sum,然后对字符串sum取反,得到发送时所用的校验码。
假设接收端的IP首部与发送的是相同的,那么其10个字段的利用反码和算法求出的值应为0。
算法的流程与在发送端求出发送的校验码过程相同。
(3)几个主要的方法
将16进制转化为二进制的字符串操作:
public static string Change(char a)
{
switch (a)
{
case 0: return 0000;
case 1: return 0001;
case 2: return 0010;
case 3: return 0011;
case 4: return 0100;
case 5: return 0101;
case 6: return 0110;
case 7: return 0111;
case 8: return 1000;
case 9: return 1001;
case a: return 1010;
case b: return 1011;
case c: return 1100;
case d: return 1101;
case e: return 1110;
case f: return 1111;
default: break;
}
return xxxx;
}
求各字段的反码:
public static string FanMa(string zd)
{
string buff0 = ;
char a;
for (int i = 0; i zd.Length; i++)
{
a = zd
文档评论(0)