Python での DNS ルックアップ

Dr. Muhammad Abdullah 2023年6月21日
  1. DNSとは
  2. DNS ルックアップ
  3. Python での DNS ルックアップ
Python での DNS ルックアップ

この記事では、DNS と DNS ルックアップの概念について説明します。 この後、Python を使用した DNS ルックアップの方法について説明します。

DNSとは

DNS (ドメイン ネーム システム) は、ドメイン名をパブリック IP アドレスに変換します。 DNS サーバーは、Web サイトのドメイン名をその Web サイトのホスト サーバーのパブリック IP に変換します。

DNS ルックアップ

DNS ルックアップは、ユーザーが Web サイトのドメイン名にヒットするか、パブリック IP に対してドメイン名を見つけるたびに、Web サイトのパブリック IP の検索を開始するプロセスです。

DNS ルックアップには 2つのタイプがあります。

  1. フォワード DNS ルックアップ

    フォワード DNS ルックアップは、フォワード DNS とも呼ばれます。 これは、DNS サーバーを使用してドメイン名を解決することにより、任意のドメインのパブリック IP を見つけるために使用されるプロセスです。

  2. 逆引き DNS ルックアップ

    リバース DNS ルックアップは、フォワード DNS ルックアップとは対照的に機能します。 これは、パブリック IP アドレスに対してドメイン名を見つけるために使用されるプロセスです。

DNS ルックアップのコマンド

nslookup コマンドは、ホスト名に対して IP アドレスまたはドメイン ネーム システムを検索します。 たとえば、nslookup google.com の出力を以下に示します。

nslookup

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 関数は、familysocktypeproto、および sockaddr の 5つの要素のリストを返します。

familysocktype、および proto は、socket().canonname で使用できる整数です。ホストの正規名を示す文字列 sockaddr は、アドレスとポートの 2つの要素を持つタプルです。