web-dev-qa-db-ja.com

dns.resolver(pythondns)を使用して特定のDNSサーバーを設定する

使っています dns.resolver from dnspython

クエリに使用するサーバーのIPアドレスを設定することは可能ですか?

35
Massimo

これは多少古いスレッドですが、私は飛び込みます。同じ課題にぶつかったので、解決策を共有したいと思いました。したがって、基本的に設定ファイルは、使用しているdns.resolver.Resolverの「nameservers」インスタンス変数に値を設定します。したがって、特定のネームサーバーを使用するようにリゾルバーを強制したい場合は、次のように直接行うことができます。

import dns.resolver

my_resolver = dns.resolver.Resolver()

# 8.8.8.8 is Google's public DNS server
my_resolver.nameservers = ['8.8.8.8']

answer = my_resolver.query('google.com')

誰かがそれが便利だと思うことを願っています。

82

はい、そうです。

このように便利な関数dns.resolver.query()を使うと

import dns.resolver
r = dns.resolver.query('example.org', 'a')

このような特定のネームサーバー(またはリスト)が使用されるように、デフォルトのリゾルバーを再初期化できます。例:

import dns.resolver
dns.resolver.default_resolver = dns.resolver.Resolver(configure=False)
dns.resolver.default_resolver.nameservers = ['8.8.8.8', '2001:4860:4860::8888',
                                             '8.8.4.4', '2001:4860:4860::8844' ]
r = dns.resolver.query('example.org', 'a')

または、いくつかのクエリに対してのみ別のリゾルバオブジェクトを使用できます。

import dns.resolver
res = dns.resolver.Resolver(configure=False)
res.nameservers = [ '8.8.8.8', '2001:4860:4860::8888',
                    '8.8.4.4', '2001:4860:4860::8844' ]
r = res.query('example.org', 'a')
4
maxschlepzig

質問では指定していませんが、 dnspython.orgからのリゾルバー を使用していると仮定すると、ドキュメントは nameservers を設定することを示していますResolverオブジェクトの属性。

コンストラクタのfilename引数 に渡す/etc/resolv.confスタイルのファイルを提供する方が簡単かもしれませんが。

0
bstpierre