Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2175538
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: LINUX

2010-10-29 19:13:03

EHCO请求(type=8)和EHCOtype=0)主要用来测试发送方通过网络到达接收方之间的通信,在许多主机中,这个功能叫做ping。其报文格式如下:

 

 

                    ECHO请求和应答报文格式

0               7 8             15 16                                     31

类型

代码

校验和

      

          标识符

 

              序号

 

                              数据

 

/* Handle ICMP_ECHO ("ping") requests. */

//处理ICMP_ECHO“ping”)的要求 回应/请求应答报文

static void

icmp_echo(struct icmphdr *icmph, struct sk_buff *skb, struct device *dev      unsigned long saddr, unsigned long daddr, int len,

      struct options *opt)//传递参数,其中包含ICMP头部,首部信息,硬件帧头空间,

IP地址,目的IP地址,IP数据包长度,

{

  struct icmphdr *icmphr;

  struct sk_buff *skb2;

  int size, offset;

 

  size = sizeof(struct sk_buff) + dev->hard_header_len + 64 + len;

  skb2 = alloc_skb(size, GFP_ATOMIC);//为数据包分配空间

  if (skb2 == NULL) {//首部信息为空

    skb->sk = NULL;

    kfree_skb(skb, FREE_READ);  //IP头部开始读出数据

    return

  }

  skb2->sk = NULL;

  skb2->mem_addr = skb2;

  skb2->mem_len = size;

  skb2->free = 1;

//此段函数完成建立连接功能  若成功则发送  若不成功返回错误

/* Build Layer 2-3 headers for message back to source *//为返回源地址的消息建立数据链路层和网络层的头部信息.

 

  offset = ip_build_header(skb2, daddr, saddr, &dev,        //  建立IP报头

                IPPROTO_ICMP, opt, len, skb->ip_hdr->tos,255);

  if (offset < 0) {

    printk("ICMP: Could not build IP Header for ICMP ADDRESS Response\n");//如果偏移量小于0,说明该IP包不存在

    kfree_skb(skb2,FREE_WRITE);

    skb->sk = NULL;

    kfree_skb(skb, FREE_READ);

    return;

  }

如果OFFSET<0输出“无法建立的IP地址的ICMP应答头”

 然后释放SKB2  SKB->SK为空

 

/* Re-adjust length according to actual IP header size. *重新调整长度按实际的IP报头的大小/

由于分片,需对数据包重新调整

  skb2->len = offset + len } ;

 

 

 

小节:发送发发送一个EHCO请求报文,里面包含标识符(16位)和一个序号(16位),也可以在报文中携带数据。当接受法受到该请求报文,她把源地址和目的地址倒换过来,重新计算校验和,然后向发送方返回一个ECHO响应报文,如果数据域中有数据的话,也会返回发送方。
阅读(9031) | 评论(0) | 转发(0) |
0

上一篇:ICMP重定向

下一篇:地址掩码请求和应答

给主人留下些什么吧!~~