5

因此,我正在尝试获取程序正在运行的机器的 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 端口?

感谢您的帮助。

4

2 回答 2

4

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

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

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

原始问题在这里提出并回答,但socket.getfqdn()解决方案并没有一目了然。如果您决定走这条路,这是解析输出的解决方案。ifconfig标准库似乎足以解决您的问题。

于 2013-03-13T17:53:20.243 回答
1

netifaces似乎是一个非常可爱的 python 模块,应该可以为您解决问题。

于 2013-03-13T17:49:56.277 回答