1

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

4

1 回答 1

1

正如本答案中所解释的,ping 子网中的所有主机并查看哪些响应或访问 ARP 缓存。第一种方法是通过使用创建原始套接字来完成的

int sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP));

但是,原始套接字基本上只为您提供 IP 标头,因此您需要自己构造 ICMP 回显数据包。构建完成后,您只需将它们发送到子网中的每个 IP 使用sendto()并等待响应。对于第二种方法,我建议阅读类似的内容

至于确定主机名,取决于主机是否具有 DNS 或 NETBIOS 名称。如果您在 LAN 上配置了 DNS,则可以通过调用getaddrinfo()响应地址来逃避。不幸的是,我不知道如何找出任何给定 IP 的 NETBIOS 名称。

于 2013-05-22T21:20:46.790 回答