Python 获取Ubuntu机器的局域网IP地址
我正在尝试获取程序运行所在机器的局域网IP地址,并将其与通过UDP传递给它的IP地址进行比较。
但是当我使用:
print str(socket.gethostbyname(socket.gethostname()))
它返回的是127.0.0.1,而我期望的是192.168.1.9。
我查看了Linux机器,发现它获取的是lo(回环)端口的IP地址?我不太明白那是什么,但它应该获取的是eth0的IP地址。
我发现可以通过子进程运行bash命令“ifconfig eth0”,但这会返回一大块字符串。我可以处理它,提取出我需要的信息,但这个程序将在beaglebone上每秒运行大约3次,所以我希望能更高效一些。
有没有更优雅的方法来做到这一点?
我可以直接改变gethostname的目标吗?
为什么它会指向lo端口?
谢谢你的帮助。
2 个回答
4
试着返回机器的完整域名:
print str(socket.gethostbyname(socket.getfqdn()))
/etc/hosts
文件里可能有一个条目,把主机名解析到 127.0.0.1
,这就是为什么 socket.gethostbyname()
没有返回你预期的结果。
原问题的提问和回答可以在 这里找到,不过 socket.getfqdn()
的解决方案一眼看上去并不明显。如果你决定走这条路,这里有一个 解析 ifconfig
输出的解决方案。标准库似乎已经足够解决你的问题了。
1
netifaces 这个Python模块看起来非常不错,可以帮你解决问题。