1 / 21
文档名称:

ping命令设计与实现.docx

格式:docx   大小:113KB   页数:21页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

ping命令设计与实现.docx

上传人:花双韵芝 2022/5/17 文件大小:113 KB

下载得到文件列表

ping命令设计与实现.docx

文档介绍

文档介绍:精品文档
精品文档
1
精品文档
设计报告
课程
设计名称
专业班级

计算机网络
《ping命令的设计与实现》
计科094
精品文档
精品文档
21
精品文档
同组人姓名6
精品文档
TCP/IP协议栈使用的校验算法是比较经典的,回计算结果。需要注意的是对奇数个字节数据的计算,的字节,低字节填充了0。

对16为的数据进行累加计算,并返
是将最后的有效数据作为最高位
精品文档
精品文档
21
精品文档
/*CRC16校验和计算icmp_cksum
参数:
data:数据
len:数据长度
返回值:
计算结果,short种类
*/
staticunsignedshorticmp_cksum(unsignedchar*data,intlen)
{
intsum=0;/*计算结果*/
intodd=len&0x01;/*是否为奇数*/
unsignedshort*value=(unsignedshort*)data;
/*将数据按照2字节为单位累加起来*/
while(len&0xfffe){
sum+=*(unsignedshort*)data;
data+=2;
len-=2;
}
精品文档
精品文档
21
精品文档
/*判断是否为奇数个数据,若

ICMP

报头为奇数个字节,会剩下最后一字节。

*/
精品文档
精品文档
21
精品文档
if(odd){
精品文档
精品文档
21
精品文档
unsignedshorttmp=((*data)<<8)&0xff00;
sum+=tmp;
}
sum=(sum>>16)+(sum&0xffff);
sum+=(sum>>16);
return~sum;
}
精品文档
精品文档
21
精品文档
设置IP发送报文的头部
ip头部格式:
structip
{
#if__BYTE_ORDER==__LITTLE_ENDIAN
/*
如果为小端*/
gnedintip_v:4;
/*版本*/
#endif
#if__BYTE_ORDER==__BIG_ENDIAN
/*如果为大端*/
unsignedintip_v:4;
/*
版本*/
unsignedintip_hl:4;
/*
头部长度*/
#endif
u_int8_tip_tos;
/*TOS,服务种类
*/
u_shortip_len;
/*
总长度*/
u_shortip_id;
/*
表记值*/
u_shortip_off;
*
段偏移值*/
u_int8_tip_ttl;
/*TTL,生存时间
*/
u_int8_tip_p;
/*
协议种类*/
u_shortip_sum;
/*
校验和*/
structin_addrip_src,ip_dst;
/*
源地点和目的地点
*/
};
精品文档
精品文档
22
精品文档
设置ICMP发送报文的头部
关于回显恳求的ICMP报文,下面是ICMP构造简化形式:
structicmp
{
u_int8_ticmp_type;/*消息种类*/
u_int8_ticmp_code;/*消息种类的子码*/
u_int16_ticmp_cksum;/*校验和*/
union
{
u_charih_pptr;/*ICMP_PARAMPROB*/
structin_addrih_gwaddr;/*网关地点*/
structih_idseq/*显示数据报*/
{
精品文档
精品文档
23
精品文档
u_int16_ticd_id;/*数据报
u_int16_ticd_seq;/*数据报的序号
}ih_idseq;
}icmp_hun;

ID*/
*/
精品文档
精品文档
21
精品文档
#define
#define

icmp_id
icmp_seq



精品文档
精品文档
21
精品文档
union
{
struct
{
精品文档
精品文档
21
精品文档
u_int8_t

id_data[1];

/*