Python在Ubuntu上获取机器的LAN IP地址

时间:2013-03-13 17:39:54

标签: python ubuntu network-programming

所以我试图获取程序运行的机器的LAN IP地址,并将其与通过UDP传递给它的IP地址进行比较。

但是当我使用时:

print str(socket.gethostbyname(socket.gethostname()))

返回127.0.0.1,应为192.168.1.9。

我查看了linux机器并获取了lo(loopBack)端口的IP地址?我不确切知道那是什么,但它应该是获取eth0的IP地址。

我发现我可以对bash命令“ifconfig eth0”进行子处理,但会返回一个字符串的大块。我可以将它处理成我需要的东西,但这会在beaglebone上每秒运行3次左右,所以我希望它更有效。

有更优雅的方式吗?

我可以更改gethostname的目标吗?

为什么它以lo端口为目标?

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

尝试返回机器的完全限定域名:

print str(socket.gethostbyname(socket.getfqdn()))

/etc/hosts可能有一个条目将主机名解析为127.0.0.1,这就是为什么socket.gethostbyname()无法返回您期望的内容。

提出原始问题并回答here,但socket.getfqdn()解决方案并未突然显示出来。如果您决定走这条路线,这是解析ifconfig输出的solution。标准库似乎足以解决您的问题。

答案 1 :(得分:1)

netifaces似乎是一个非常甜蜜的python模块,应该为你做到这一点。