如何使用ICMP获取地址掩码

时间:2016-03-24 01:34:14

标签: linux icmp

RFC 950,第11页:

  

接收地址掩码请求的网关应该返回它   地址掩码字段设置为32位掩码的标识位   子网和网络,用于接收请求的子网。

我想获取一个主机地址掩码,并为本地网关和其他IP构建一个ICMP地址掩码请求包。我使用tcpdump -i eth0 icmp并找到ICMP address mask request数据包已发送。但我没有找到任何响应。有什么问题吗?主要代码是:

 struct icmp        *picmp;

 /* ICMP header */
 picmp = (icmp_t *)send_buf;
 picmp->icmp_type = ICMP_MASKREQ;    // Address Mask Request
 picmp->icmp_code = 0;
 picmp->icmp_id = pid;
 picmp->icmp_seq = npkt++;

 len = 12; // ICMP header length
 picmp->icmp_cksum = 0;
 picmp->icmp_cksum = in_cksum((u_short *)picmp, len);

 sendto(sock_fd, send_buf, len, 0, pr->p_addr, pr->addr_len);  

1 个答案:

答案 0 :(得分:0)

地址掩码已过时,因为其主要功能(主机在网络配置期间找到其本地网络掩码)已包含在动态主机配置协议(DHCP RFCWikipedia)中。它可能没有在大多数消费者路由器上实现。它已在RFC 6918中正式弃用。

如果要查询路由器的配置信息,为了了解拓扑,相应的协议是简单网络管理协议(SNMP RFCWikipedia)。这是一个相当复杂的协议,所以如果你想使用它,你应该寻找预先编写的实现(有库和CLI接口)。但是,路由器通常需要授权客户端,因此您无法为此查询随机Internet路由器;我不确定消费者路由器是否实现它,因为家庭路由器的集中管理并不常见。