RFC 950,第11页:
接收地址掩码请求的网关应将其与
地址掩码字段设置为标识
子网和网络,用于接收请求的子网。
我想获取一个主机地址掩码,并建立一个ICMP地址掩码请求包到本地网关和其他IP。我使用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);
最佳答案
地址掩码已过时,因为它的主要功能(主机在网络配置期间查找其本地网络掩码)已包含到动态主机配置协议中(DHCP RFC,Wikipedia)。它可能没有在大多数消费者路由器上实现。它在RFC 6918中被正式弃用。
如果要查询路由器的配置信息,为了了解拓扑结构,适当的协议是简单网络管理协议(SNMP RFC,Wikipedia)。这是一个相当复杂的协议,因此如果您想使用它,您应该寻找预先编写的实现(有库和CLI接口)。然而,路由器通常需要客户机的授权,因此您将无法为此查询随机的Internet路由器;我不确定消费者路由器是否实现了它,因为对家庭路由器进行集中管理是不常见的。
关于linux - 如何使用ICMP提取地址掩码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36191777/