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

标签 python ubuntu network-programming

<分区>

所以我试图获取运行该程序的机器的 LAN 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端口?

感谢您的帮助。

最佳答案

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

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

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

原始问题的提问和回答 here ,但是 socket.getfqdn() 解决方案并没有一眼就看出来。这是 solution用于解析 ifconfig 输出(如果您决定走那条路)。标准库似乎足以解决您的问题。

关于Python 在 Ubuntu 上获取机器的 LAN IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15392544/

相关文章:

python - django 中的关系数据库以弹出形式

python - 为什么 dateutil.parser.parse() 在此字符串上得到的年份错误?

php - 可以使用终端访问 mysql 数据库,但使用 php 时收到 "access denied"消息

c++ - 非阻塞套接字和 send()

Python:如何允许集合中出现重复项?

python - libtorrent-rasterbar 的 python 绑定(bind)是否适用于 Python 3?

session - 登录主服务器上现有的 Putty session

linux - apt-get dist-upgrade,不覆盖我自己编译的vim

.net - 对于两个不同的Silverlight应用程序,我真的需要两个策略服务器吗?

c - 使用 listen(1) 的套接字上的两个(错误的)连接