2016-07-07 13 views
4

私は以下のコードを使用してマシンにログインしている人のIPアドレスを取得しようとしていますが、エラーが発生します。名前またはサービスがわからない

>>> 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

。 2 –

+0

'socket.gethostname()'だけを実行するとどうなりますか? –

+0

インスタンス名が正しく取得されています。 – user1050619

答えて

0

socket.gethostname()によって返されているものを確認し、pingできるかどうかを確認してください。基本的にこれはルックアップの失敗です。 /etc/hostsをチェックして、リストされているかどうか確認してください。私はそれが奇妙に思えますが、私は、返されているホスト名にエントリがないと、ネームサービスの失敗が発生すると思います。

1

ホスト名を正しく設定していないためにエラーが発生しました。ログアウトして、ログイン後、 に

  1. の/ etc /ホスト名
  2. の/ etc/hosts
  3. runコマンドの$のホスト名 - にある三つの異なる場所でホスト名を設定します。再び。あなたは完了です。

0

IPv6または複数のネットワークインターフェイスを備えたサーバーで作業している場合、このコマンドは正しく動作しません。

代わりに、あなたがポート53で8.8.8.8で、GoogleのDNSサーバーに接続し、あなたの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]) 
カーネル4.6にアーチ64ビットにここに作品
関連する問題