Python - ホスト名からIPアドレスを取得する
Pythonのソケットモジュールを使用して、ホスト名からIPアドレスを取得できます。
ソケットモジュールはPythonのコアライブラリの一部であるため、別途インストールする必要はありません。
ホスト名からIPアドレスを取得するためのPythonソケットモジュール
Pythonのソケットモジュールのgethostbyname()関数は、ホスト名の引数を受け取り、文字列形式でIPアドレスを返します。
ここでは、いくつかのウェブサイトのIPアドレスを調べるためのPythonインタープリタの簡単な例を示します。
python3.7
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import socket
>>> socket.gethostbyname('journaldev.com')
'45.79.77.230'
>>> socket.gethostbyname('google.com')
'172.217.166.110'
>>>
注: ウェブサイトがロードバランサーの背後にあるか、クラウドで動作している場合、IPアドレスの照会結果が異なる場合があります。
例えば、google.comやfacebook.comのために上記のコマンドを実行してみてください。もしあなたが私と同じ場所(インド)にいない場合、異なるIPアドレスが出力される可能性があります。
ウェブサイトのIPアドレスを見つけるためのPythonスクリプト
ユーザーにウェブサイトのアドレスを入力してもらい、そのIPアドレスを表示する例を見てみましょう。
import socket
hostname = input("Please enter website address:\n")
IP lookup from hostname
print(f'The {hostname} IP Address is {socket.gethostbyname(hostname)}')
ここに、ホスト名をスクリプトへのコマンドライン引数として渡す別の例があります。このスクリプトはIPアドレスを見つけて、それを出力します。
import socket
import sys
no error handling is done here, excuse me for that
hostname = sys.argv[1]
IP lookup from hostname
print(f'The {hostname} IP Address is {socket.gethostbyname(hostname)}')
出力:
python3.7 ip_address.py facebook.com
The facebook.com IP Address is 157.240.23.35
socket.gethostbyname()のエラーシナリオ
ホスト名が有効なIPアドレスに解決されない場合、socket.gaierrorが発生します。このエラーは、try-exceptブロックを使用してプログラム内で捕捉できます。
無効なホスト名に対する例外処理を追加した更新されたスクリプトです。
import socket
import sys
hostname = sys.argv[1]
IP lookup from hostname
try:
ip = socket.gethostbyname(hostname)
print(f'The {hostname} IP Address is {ip}')
except socket.gaierror as e:
print(f'Invalid hostname, error raised is {e}')
出力 :
python3.7 ip_address.py jasjdkks.com
Invalid hostname, error raised is [Errno 8] nodename nor servname provided, or not known
#
参考: ソケットモジュールAPIドキュメント

