PythonでDNS情報を取得する

Yuu
2025-03-17
2025-03-17
皆様はじめまして!11月にフューチャースピリッツに入社したYuuです、今回初めてエンジニアブログを書きます。

温かい目で見守っていただけますと幸いです。

さて、記念すべき第一弾ですが、今回はPythonのライブラリの中で気になったライブラリがありましたのでシェアしたいと思います。
■Pythonを使って業務効率化:
日々の業務の中で、DNS情報を取得するために毎回ターミナルからDigコマンドを叩いてDNS情報を取得し、取得した情報を判定材料として業務を行っていましたがプログラムを起動したらDNS情報を取得し、その後の処理まで一気通貫で行えたら楽だな~・・・・と考えました。

そこで"dnspython"というライブラリを使用しました。
■ライブラリをインストールする:
まずは、dnspythonをインストールしましょう。
pip install dnspython

■dnspythonを呼び出す:
import dns.resolver

■ドメインに設定されているDNSレコード情報を取得する:
DNSレコード情報を取得するには"dns.resolver.resolve()"メソッドを使用し、
第一引数にドメイン名を、第二引数にDNSレコードのタイプを指定することで取得します。
返り値はオブジェクト型でデータが返ってくるので、取得したデータはfor文を回したりすることで取り出せます。
# Aレコードのオブジェクト型データを取得
answers = dns.resolver.resolve('ドメイン名', 'A')

■オブジェクト型のデータにアクセスして取り出す
# データを表示
print(answers[0])

■結果例:
23.192.228.80

■レコードごとにデータを表示:
FOR文を回してレコードを1行ずつ取り出すことが出来ます。
# レコードを1行ずつ表示
print("ANSWER SECTION:")
for answer in answers:
    print(f"example.com IPADDRESS:{answer.address}")

■結果例:
ANSWER SECTION:
example.com IPADDRESS:23.192.228.80
example.com IPADDRESS:23.192.228.84
example.com IPADDRESS:23.215.0.136
example.com IPADDRESS:23.215.0.138
example.com IPADDRESS:96.7.128.175
example.com IPADDRESS:96.7.128.198

その他のDNSレコードタイプ(TXTやMX etc.)を指定して取得出来ます


import dns.resolver

# Aレコードのオブジェクト型データを取得
answers = dns.resolver.resolve('example.com', 'TXT')

print("ANSWER SECTION:")
# レコードを1行ずつ表示
for answer in answers:
    print(f"example.com TXT Strings:{answer.strings[0].decode('utf-8')}")

■結果例:
ANSWER SECTION:
example.com TXT Strings:_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9
example.com TXT Strings:v=spf1 -all

上記の形でDNS情報をPythonで取得して自動化、効率化LIFEをエンジョイしていきましょう!