2013-03-13 77 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

相關問題