Python 获取Ubuntu机器的局域网IP地址

5 投票
2 回答
5764 浏览
提问于 2025-04-17 18:58

我正在尝试获取程序运行所在机器的局域网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模块看起来非常不错,可以帮你解决问题。

撰写回答