全部博文(436)
分类: LINUX
2010-10-29 19:54:34
地址掩码请求和应答报文格式
地址掩码请求报文(type=17)和地址掩码应答报文(type=18)是为了子网请求应答而加到ICMP报文中的,其报文格式如下
0 7 8 15 16 31
类型 |
代码 |
校验和 |
标识符 |
序号 | |
地址掩码 |
他假定请求的主机知道自己的Internet地址,然后向目的地址255.255.255.255广播地址掩码请求报文,这时地址掩码域中全部为“0”,知道正确地址掩码的路由器就会返回一个地址掩码应答报文,该应答报文中就包含了请求主机所需的地址掩码。
/* Build ICMP ADDRESS MASK Response message. *建立的ICMP地址掩码响应消息/
icmphr = (struct icmphdr *) (skb2->data + offset);
icmphr->type = ICMP_ADDRESSREPLY;//ICMP报文类型
icmphr->code = 0;//ICMP代码类型为响应应答
icmphr->checksum = 0;//ICMP协议的校验和
icmphr->un.echo.id = icmph->un.echo.id;//ICMP的响应ID与ICMP头的响应ID相同
icmphr->un.echo.sequence = icmph->un.echo.sequence;
memcpy((char *) (icmphr + 1), (char *) &dev->pa_mask, sizeof(dev->pa_mask));//向广播发送请求地址掩码报文信息,将广播返回的地址掩码拷贝
icmphr->checksum = ip_compute_csum((unsigned char *)icmphr, len);//计算校验和
/* Ship it out - free it when done */
ip_queue_xmit((struct sock *)NULL, dev, skb2, 1); 顺序发送 DEV SKB2数据
skb->sk = NULL; SKB->SK为空
kfree_skb(skb, FREE_READ) ; SKB自由写入
}
功能:处理地址掩码请求。
如果被配置成地址掩码代理,则填写icmp-param结构,调用icmp_build_xmit,然后释放skb结构空间。否则,仅释放skb空间。