2013-03-13 74 views
5

因此,我试图获取运行程序的机器的局域网IP地址,并将其与通过UDP传递给它的IP地址进行比较。Python在Ubuntu上获取机器的局域网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口?

感谢您的帮助maners。

+0

如果有人试图做到这一点,他们有一个服务器,将始终有互联网接入有网站http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a -network-inter /可以解决问题。但我的服务器不会总是有互联网,所以我不能使用它。 – Poodimizer

回答

1

netifaces看起来像一个非常甜蜜的Python模块应该为你做的伎俩。

+0

这看起来很有希望。我一定会检查出来并回复给你 – Poodimizer

4

,请返回机器的完全限定域名:

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

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

原来的问题提出和回答here,但socket.getfqdn()解决方案并没有在看一眼就伸出。如果你决定去那条路线,这里的solution用于解析ifconfig输出。标准库似乎绰绰有余解决您的问题。

+0

我的印象是hosts文件只是外部服务器的dns查询表。尽管(127.0.1.1),print str(socket.gethostbyname(socket.getfqdn()))返回了同样的结果。 – Poodimizer

+0

@Poodimizer'socket.getfqdn()'返回什么?看到你的'hosts'文件也是有帮助的。 – Bryan

+0

你是对的主机文件了: 127.0.0.1本地主机 127.0.1.1 omap 我现在正在运行一个错误,所以我现在不能运行socket.fqdn()。必须重新启动服务器。 – Poodimizer

相关问题