ホームページ  >  記事  >  バックエンド開発  >  DNS 順方向クエリと逆方向クエリを実装する Python の例

DNS 順方向クエリと逆方向クエリを実装する Python の例

WBOY
WBOYオリジナル
2016-06-16 08:44:291440ブラウズ

1. DNS クエリプロセス:

www.baidu.com へのクエリを例に挙げます

(1) コンピューターは www.baidu.com を解決するリクエストをローカル ドメイン ネーム サーバーに送信します
(2) ローカル ドメイン ネーム サーバーはリクエストを受信した後、まずローカル キャッシュをクエリします (見つかった場合)。クエリ結果が直接返されます。そのようなレコードがない場合、ローカル ドメイン ネーム サーバーは www.baidu.com へのリクエストをルート ドメイン ネーム サーバーに送信します
(3) リクエストを受信した後、ルート ドメイン ネーム サーバーは.com ドメインのサーバー IP アドレスをローカル ドメイン ネーム サーバーに返します
(4) ローカル ドメイン ネーム サーバーは .com サーバーに接続し、ドメイン名 www.baidu.com を解決するように要求します。サーバーは、baidu.com サーバーの IP アドレスをローカル DNS サーバーに返します
(5) ローカル DNS サーバーは、baidu.com サーバーにリクエストを送信します。ドメイン名解決リクエストを送信すると、baidu.com サーバーはwww.baidu.com の IP アドレスをローカル DNS サーバーに送信
(6) ローカル DNS サーバーは、www.baidu.com の IP アドレスをコンピューターに返します。

2. ドメイン名と IP アドレスの対応:

ドメイン名は複数の IP アドレスに対応できますが、同時に、ドメイン名は 1 つの IP アドレスのみを持つことができ、1 つの IP アドレスは複数のドメイン名に対応できます。

3. DNS のクエリ

Python は、順方向および逆方向の DNS クエリを実装できます。以下は、 前方クエリのコードです:

コードをコピーします コードは次のとおりです:

#!/usr /bin/env python
import sys,socket
result=socket.getaddrinfo(sys,argv[1],None)
print result[0][4]

ドメイン名には複数の IP アドレスを含めることができるため、上記のプログラムを 2 回実行すると結果が異なる場合があります。

プログラムを実行します:

コードをコピーします コードは次のとおりです:
./test.py www.baidu.com
結果は次のとおりです:
コードをコピーします コードは次のとおりです:
('111.13.100.91', 80)

逆クエリ:

コードをコピー コードは次のとおりです:

#!/ usr/ bin/env python
import sys,socket
try:
result=socket.gethostbyaddr(sys.argv[1])
print "ホスト名は "+result[0]
ソケット .herror,e:
print "検索できません" を除く

プログラムを実行します

コードをコピーします コードは次のとおりです:
./test2 127.0.0.1
結果は次のようになります:
コードをコピー コードは次のとおりです:
ホスト名は localhost
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。