2016-07-07 45 views
4

我一直在嘗試使用下面的代碼登錄到本機的人的ipaddress,但我得到一個錯誤。姓名或服務不知道

>>> import socket 
>>> socket.gethostbyname_ex(socket.gethostname()) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
socket.gaierror: [Errno -2] Name or service not known 

相同的代碼在其他linux盒子中工作。 不知道我修復它。

+0

在這裏工作拱上的64位內核4.6。 2 –

+0

如果你只是'socket.gethostname()'會發生什麼? –

+0

我正確地獲取實例名稱。 – user1050619

回答

0

檢查socket.gethostname()返回的內容是否可以ping通。基本上這是查找失敗。檢查您的/etc/hosts以查看它是否已列出。我知道這看起來很奇怪,但我認爲如果返回的主機名沒有條目,你會得到一個名稱服務失敗,就是這樣。

1

僅僅因爲沒有正確設置主機名而發生錯誤。設置主機名,在三個不同的地方,這是在 -

  1. 的/ etc /主機名
  2. /etc/hosts中
  3. 運行命令$主機名

然後註銷和登錄再次。你完成了。

0

如果您正在使用IPv6或具有多個網絡接口的服務器,此命令將無法正常工作。

相反,你可以使用此命令試圖在8.8.8.8連接到谷歌DNS服務器的53端口,並返回你的ip:

import socket 
print([(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]) 
相關問題