Python – ホスト名からIPアドレスを取得

ネイティブの日本語で以下を言い換えます。オプションは1つだけです:
Pythonのソケットモジュールを使用すると、ホスト名からIPアドレスを取得することができます。

ソケットモジュールはPythonのコアライブラリの一部なので、別途インストールする必要はありません。

(Soketto moduru wa Python no kou raiburari no ichibu nanode, bettotsu insutooru suru hitsuyou wa arimasen.)

ホスト名からIPアドレスを取得するためのPythonソケットモジュール

Pythonのソケットモジュールのgethostbyname()関数は、ホスト名の引数を受け取り、IPアドレスを文字列形式で返します。

Pythonインタープリターで、特定のウェブサイトのIPアドレスを調べるためのシンプルな例を紹介します。

# 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('scdev.com')
'45.79.77.230'
>>> socket.gethostbyname('google.com')
'172.217.166.110'
>>> 

注意:ウェブサイトがロードバランサーによって保護されているか、クラウド上で動作している場合、IPアドレスの検索結果が異なる場合があります。

たとえば、上記のコマンドをgoogle.comやfacebook.comに対して試してみてください。もし私と同じ場所(インド)ではない場合、出力されるIPアドレスは異なる可能性があります。

ウェブサイトのIPアドレスを検索するためのPythonスクリプト

Webサイトのアドレスをユーザーに入力して、それに対応するIPアドレスを表示する例を見てみましょう。

import socket

hostname = input("Please enter website address:\n")

# IP lookup from hostname
print(f'The {hostname} IP Address is {socket.gethostbyname(hostname)}')
Python Get Ip Address 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ドキュメント

コメントを残す 0

Your email address will not be published. Required fields are marked *