RFC 950,第11页:
接收到地址掩码请求的网关应返回该请求,其中地址掩码字段被设置为用于识别接收到请求的子网的子网和网络的位的32位掩码。
我想获取一个主机地址掩码,并建立一个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);
1条答案
按热度按时间c0vxltue1#
地址掩码已经过时,因为它的主要功能(主机在网络配置过程中找到它们的本地网络掩码)已经被纳入动态主机配置协议(DHCP RFC,Wikipedia)。它可能没有在大多数消费者路由器上实现。它已经在RFC 6918中正式弃用。
如果要查询路由器的配置信息以了解拓扑,则简单网络管理协议是合适的协议(SNMP RFC,Wikipedia)。这是一个相当复杂的协议,因此如果要使用它,应该寻找预先编写的实现(库和CLI接口都有),但是路由器一般需要客户端授权,所以你不能随机查询互联网路由器;我不确定消费者路由器是否实现了它,因为家庭路由器的中央管理是不常见的。