カテゴリ: Python 更新日: 2026/08/11

PythonでDNSレコードを取得する方法を完全解説!socketとdnspythonで学ぶネットワークプログラミング入門

PythonでDNSレコードを取得する方法(socketとdnspythonの活用)
PythonでDNSレコードを取得する方法(socketとdnspythonの活用)

先生と生徒の会話形式で理解しよう

生徒

「PythonでWebサイトの情報を調べることってできますか?」

先生

「できますよ。例えばDNSレコードを取得すれば、そのサイトのIPアドレスなどを調べることができます。」

生徒

「DNSレコードってなんですか?」

先生

「簡単にいうと、インターネット上の住所のようなものです。Pythonを使えば簡単に取得できますよ。」

1. DNSとは?初心者向けにやさしく解説

1. DNSとは?初心者向けにやさしく解説
1. DNSとは?初心者向けにやさしく解説

DNSとは、ドメイン名とIPアドレスを結びつける仕組みです。例えば「google.com」と入力すると、実際には数字のIPアドレスに変換されて通信が行われます。この変換を行うのがDNSです。

つまりDNSレコードとは、「このドメインはこのIPですよ」という情報のことです。インターネットの住所録のようなイメージで考えるとわかりやすいです。

2. PythonでDNSを扱う理由とメリット

2. PythonでDNSを扱う理由とメリット
2. PythonでDNSを扱う理由とメリット

PythonでDNSレコードを取得できると、サーバー管理やネットワーク確認が簡単になります。例えば、Webサイトの接続確認やトラブル調査にも役立ちます。

また、Pythonは初心者でも扱いやすいプログラミング言語なので、ネットワークプログラミングの入門にも最適です。

3. socketを使ったDNSレコード取得方法

3. socketを使ったDNSレコード取得方法
3. socketを使ったDNSレコード取得方法

Python標準のsocketモジュールを使うと、簡単にIPアドレスを取得できます。追加インストール不要なので初心者におすすめです。


import socket

domain = "google.com"
ip = socket.gethostbyname(domain)

print(ip)

このコードでは、ドメイン名からIPアドレスを取得しています。


142.250.190.78

このように、たった数行でDNSの基本情報を取得できます。

4. socketで複数のIPアドレスを取得する

4. socketで複数のIPアドレスを取得する
4. socketで複数のIPアドレスを取得する

一つのドメインに複数のIPアドレスが設定されている場合もあります。その場合は別の関数を使います。


import socket

domain = "google.com"
info = socket.getaddrinfo(domain, 80)

for item in info:
    print(item[4][0])

複数のIPアドレスが表示される

この方法で、より詳細なDNS情報を取得できます。

5. dnspythonとは?より高度なDNS取得

5. dnspythonとは?より高度なDNS取得
5. dnspythonとは?より高度なDNS取得

dnspythonはDNS専用のライブラリで、AレコードやMXレコードなど詳細な情報を取得できます。

まずはインストールします。


pip install dnspython

これで準備完了です。

6. dnspythonでAレコードを取得する

6. dnspythonでAレコードを取得する
6. dnspythonでAレコードを取得する

Aレコードは、ドメインとIPアドレスを結びつける最も基本的なDNSレコードです。


import dns.resolver

answers = dns.resolver.resolve("google.com", "A")

for rdata in answers:
    print(rdata.address)

複数のIPアドレスが表示される

socketよりも詳細で正確な情報が取得できます。

7. メールサーバー情報(MXレコード)を取得する

7. メールサーバー情報(MXレコード)を取得する
7. メールサーバー情報(MXレコード)を取得する

MXレコードはメールの配送先を示す重要なDNS情報です。


import dns.resolver

answers = dns.resolver.resolve("google.com", "MX")

for rdata in answers:
    print(rdata.exchange)

メールサーバーの情報が表示される

このように、メールの仕組みも確認できます。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

DNS取得でよくあるつまずきは、エラーの意味がわからないことです。例えば「NXDOMAIN」はドメインが存在しないという意味です。

また、インターネット接続がないとDNS取得はできません。ネットワーク環境も確認しましょう。

9. socketとdnspythonの違いまとめ

9. socketとdnspythonの違いまとめ
9. socketとdnspythonの違いまとめ

socketは簡単に使える標準機能で、初心者向けです。一方、dnspythonは詳細なDNS情報を取得できるため、実務や学習に最適です。

まずはsocketで基本を理解し、次にdnspythonで応用を学ぶとスムーズに理解できます。

まとめ

まとめ
まとめ

DNSとPythonの基礎から応用までの総復習

本記事では、Pythonを使ったDNSレコード取得の方法について、初心者でも理解しやすいように基礎から応用までを丁寧に解説してきました。DNSとは何かという基本的な仕組みから始まり、インターネットにおけるドメイン名とIPアドレスの関係、そしてそれらをプログラムで扱う重要性について理解できたはずです。

特に、Pythonの標準ライブラリであるsocketを利用することで、簡単にDNS情報を取得できる点は、ネットワークプログラミング入門として非常に有用です。数行のコードでドメインからIPアドレスを取得できるため、プログラミング初心者でもすぐに実践できます。また、getaddrinfo関数を使うことで複数のIPアドレスを取得できるなど、実務にもつながる知識を学ぶことができました。

dnspythonで広がるネットワークプログラミング

さらに、dnspythonライブラリを活用することで、AレコードだけでなくMXレコードなどの詳細なDNS情報を取得できるようになります。これにより、メールサーバーの構成確認やシステム運用に役立つ情報をプログラムから直接取得することが可能になります。DNSレコードの種類を理解し、それぞれの役割を知ることは、Web開発やインフラエンジニアにとって非常に重要なスキルです。

PythonによるDNS操作は、サーバー監視、トラブルシューティング、セキュリティチェックなど幅広い用途に応用できます。今回学んだ内容は、その第一歩として非常に価値のある知識です。

実践で使えるサンプルコードまとめ

ここでは、本記事で紹介した内容をもとに、実際にDNSレコードをまとめて取得するサンプルコードを紹介します。socketとdnspythonの両方を活用することで、より実践的なスクリプトになります。


import socket
import dns.resolver

domain = "example.com"

# socketでIP取得
print("=== socketによるIP取得 ===")
ip = socket.gethostbyname(domain)
print(ip)

# 複数IP取得
print("=== 複数IP取得 ===")
info = socket.getaddrinfo(domain, 80)
for item in info:
    print(item[4][0])

# dnspythonでAレコード
print("=== Aレコード ===")
answers = dns.resolver.resolve(domain, "A")
for rdata in answers:
    print(rdata.address)

# dnspythonでMXレコード
print("=== MXレコード ===")
answers = dns.resolver.resolve(domain, "MX")
for rdata in answers:
    print(rdata.exchange)

このように複数の方法を組み合わせることで、DNS情報の取得を自動化することができます。実務ではログ取得や監視ツールと組み合わせることで、より高度なシステム構築にも応用できます。

理解を深めるポイントと今後の学習

DNSレコードの理解を深めるためには、実際に複数のドメインで試してみることが重要です。また、エラーの意味を理解することも大切です。NXDOMAINやタイムアウトなどのエラーは、ネットワークの問題や設定ミスを示しているため、実務でも頻繁に遭遇します。

今後は、CNAMEレコードやTXTレコード、さらにはDNSSECなどのセキュリティ関連技術にも触れていくことで、より深い知識を身につけることができます。Pythonを使ったネットワークプログラミングは、学べば学ぶほど実務に直結するスキルとなります。

先生と生徒の振り返り会話

生徒

「今回の内容で、DNSってインターネットの住所みたいなものだと理解できました。」

先生

「その通りです。ドメイン名をIPアドレスに変換する仕組みがDNSですね。」

生徒

「Pythonのsocketを使えば簡単にIPアドレスを取得できるのが驚きでした。」

先生

「はい、標準ライブラリだけでできるのが大きな魅力です。まずはここから始めるのがおすすめです。」

生徒

「dnspythonを使うともっと詳しい情報が取れるのも面白かったです。MXレコードとか初めて知りました。」

先生

「MXレコードはメールの配送に関わる重要な情報です。実務でもよく使いますよ。」

生徒

「エラーの意味もちゃんと理解しないといけないんですね。」

先生

「そうですね。エラーはヒントでもあるので、意味を調べる習慣をつけるとスキルが伸びます。」

生徒

「これからは色々なドメインで試してみます!」

先生

「とても良いですね。実際に手を動かすことで、理解がどんどん深まりますよ。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

Python のネットワークプログラミングの記事一覧へ
新着記事
New1
Claude
ClaudeにPHPデバッグを相談するコツ!原因候補を仮説に分けて確認する質問例
New2
Python
PythonのCLIで対話型メニューを作る方法(prompt_toolkit)
New3
ChatGPT
ChatGPTでPHPコードを理解する方法!読めない処理をわかりやすく質問しよう
New4
PHP
PHP の定数(define, const)を使った設定方法を徹底解説!
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.3
Java&Spring記事人気No3
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.4
Java&Spring記事人気No4
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作
No.5
Java&Spring記事人気No5
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
Python
Pythonのシェルスクリプトを自動実行する方法(cron & Task Scheduler)
No.7
Java&Spring記事人気No7
Claude
ClaudeにPHPリファクタリングを相談するコツ!目的・前提・制約を仕様メモにまとめるコツ
No.8
Java&Spring記事人気No8
PHP
PHPのMVCパターンを完全解説!初心者でもわかるModel・View・Controller