是否可以在LAN网络上获取所有主机(使用C)。我需要获取IP地址和主机名。
答案 0 :(得分:1)
如this answer中所述,要ping子网中的所有主机,并查看响应或访问ARP缓存的内容。第一种方法是通过使用
创建一个原始套接字来完成的int sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP));
但是,原始套接字基本上只为您提供IP头,因此您需要自己构建ICMP echo数据包。构建它之后,然后使用sendto()
将它们发送到子网中的每个IP并等待响应。对于第二种方法,我建议阅读类似this的内容。
至于确定主机名,取决于主机是否具有DNS或NETBIOS名称。如果您在LAN上配置了DNS,则可能会在响应的地址上调用getaddrinfo()
。不幸的是,我不知道如何找出任何给定IP的NETBIOS名称。