套接字错误 - Python

3
我想获取本地私有机器的地址,运行以下代码片段:
socket.gethostbyaddr(socket.gethostname())

出现错误:

socket.herror: [Errno 2] Host name lookup failure

我知道可以通过以下方式查看本地计算机的地址:

socket.gethostbyname(socket.gethostname())

但是它显示了我的网络(或机器)的公共地址,而ifconfig则显示我的无线局域网的另一个地址。有人能帮我解决这个问题吗?谢谢。


你导入了socket模块吗? - ruddra
2
@ruddra 如果她没有这样做,那将导致完全不同的错误(NameError),这似乎不是问题所在。 - Lukas Graf
是的,我已经导入了socket并安装了nscd。 - Maria
1个回答

1
我相信你会发现netifaces在这里更有用。
它似乎是一个跨平台的库,用于处理网络接口。 示例:
>>> from netifaces import interfaces, ifaddresses
>>> interfaces()
['lo', 'sit0', 'enp3s0', 'docker0']
>>> ifaddresses("enp3s0")
{17: [{'broadcast': 'ff:ff:ff:ff:ff:ff', 'addr': 'bc:5f:f4:97:5a:69'}], 2: [{'broadcast': '10.0.0.255', 'netmask': '255.255.255.0', 'addr': '10.0.0.2'}], 10: [{'netmask': 'ffff:ffff:ffff:ffff::', 'addr': '2001:470:edee:0:be5f:f4ff:fe97:5a69'}, {'netmask': 'ffff:ffff:ffff:ffff::', 'addr': 'fe80::be5f:f4ff:fe97:5a69%enp3s0'}]}
>>> 
>>> ifaddresses("enp3s0")[2][0]["addr"]
'10.0.0.2'  # <-- My Desktop's LAN IP Address.

谢谢!那很好用,也是我想要的,但是有没有办法使用sockets找到IP地址? - Maria
不完全是这样。不是你所描述的那样。sockets模块只提供了你已经看到的两个函数,而且它们的功能非常有限。 - James Mills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接