在C中获取LAN网络上的所有主机?

时间:2013-05-22 20:29:36

标签: c windows network-programming lan

是否可以在LAN网络上获取所有主机(使用C)。我需要获取IP地址和主机名。

1 个答案:

答案 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名称。