gpt4 book ai didi

sockets - gethostbyname() 只返回本地主机在 linux 上的地址

转载 作者:行者123 更新时间:2023-12-03 11:53:20 24 4
gpt4 key购买 nike

我正在尝试以可移植的方式(Windows 和 Linux)查找本地计算机的所有 IP 地址。我使用的方法是先调用gethostname(),然后将调用结果传递给gethostbyname(),它返回一个ip地址数组。

问题是在 linux 上,我得到的唯一地址是 127.0.0.1。这适用于 Windows,我看到一些人说如果您的网络是由 DHCP 配置的,这将不适用于 Linux(不知道这是否属实)。

这不是在 Linux 上执行此操作的正确方法吗?

最佳答案

在 unix/linux 上这不是正确的方法。正确的方法是使用 ioctls 来提取必要的信息。

struct ifreq ifc_buffer[MAX_NUM_IFREQ];
ioctl(s, SIOCGIFCONF, &ifc) # Interface list
num_ifreq = ifc.ifc_len / sizeof(struct ifreq);
for(cnt=0;cnt<num_ifreq;cnt++)
struct ifreq *ifr = &ifc.ifc_req[cnt]
ioctl(s, SIOCGIFADDR, ifr); # get ip address

还有更多现代方法涉及:

if_nameindex()

对 if_nameindex 和 SIOCGIFCONF 进行 SO 搜索将产生许多与此类似的问题。

关于sockets - gethostbyname() 只返回本地主机在 linux 上的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6220204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com