Python での DNS ルックアップ
この記事では、DNS と DNS ルックアップの概念について説明します。 この後、Python を使用した DNS ルックアップの方法について説明します。
DNSとは
DNS (ドメイン ネーム システム) は、ドメイン名をパブリック IP アドレスに変換します。 DNS サーバーは、Web サイトのドメイン名をその Web サイトのホスト サーバーのパブリック IP に変換します。
DNS ルックアップ
DNS ルックアップは、ユーザーが Web サイトのドメイン名にヒットするか、パブリック IP に対してドメイン名を見つけるたびに、Web サイトのパブリック IP の検索を開始するプロセスです。
DNS ルックアップには 2つのタイプがあります。
-
フォワード DNS ルックアップ
フォワード DNS ルックアップは、フォワード DNS とも呼ばれます。 これは、DNS サーバーを使用してドメイン名を解決することにより、任意のドメインのパブリック IP を見つけるために使用されるプロセスです。
-
逆引き DNS ルックアップ
リバース DNS ルックアップは、フォワード DNS ルックアップとは対照的に機能します。 これは、パブリック IP アドレスに対してドメイン名を見つけるために使用されるプロセスです。
DNS ルックアップのコマンド
nslookup
コマンドは、ホスト名に対して IP アドレスまたはドメイン ネーム システムを検索します。 たとえば、nslookup google.com
の出力を以下に示します。
nslookup google.com
コマンドは、ホスト google.com
のドメイン ネーム システムとパブリック IP を表示します。
Python での DNS ルックアップ
次のコードを使用して、Python で任意のドメインのホスト名またはパブリック IP を見つけることができます。
import socket
ip_addr = socket.gethostbyname("www.google.com")
print(ip_addr)
Python ライブラリのソケットは、サーバー クライアント プログラムを含む、ネットワーク ベースのアプリケーションを開発するためのさまざまな関数と方法を提供します。 gethostbyname
関数は、任意のホスト名のパブリック IP アドレスを見つけるために使用されます。
gethostbyname
は、オペレーティング システムの設定されたルールを考慮せずに、ホスト名の IP アドレスのみを返します。 ただし、オペレーティング システムのすべての設定済みルールでホスト名情報を見つけることができます。
オペレーティング システムの構成されたルールを無視せずにアドレス情報を検索するために使用される次のコードを検討してください。
import socket
print(socket.getaddrinfo("www.google.com", 80))
Python のソケット ライブラリの getaddrinfo
関数は、オペレーティング システムで構成されたルールを考慮して、ホスト名に関連する情報を取得するために使用されます。
getaddrinfo
関数は、family
、socktype
、proto
、および sockaddr
の 5つの要素のリストを返します。
family
、socktype
、および proto
は、socket().canonname
で使用できる整数です。ホストの正規名を示す文字列 sockaddr
は、アドレスとポートの 2つの要素を持つタプルです。