10

ドメインの大規模なリストでMXレコードをチェックする小さなスクリプトがあり、すべてが正常に機能しますが、スクリプトがレコードのないドメインを見つけた場合、次のドメインにスキップするのにかなり長い時間がかかります。

追加してみました:

query.lifetime = 1.0
or
query.timeout = 1.0

しかし、これは何もしないようです。この設定がどのように構成されているか知っている人はいますか?

私のスクリプトは以下のとおりです。お時間をいただきありがとうございます。

import dns.resolver
from dns.exception import DNSException
import dns.query
import csv

domains = csv.reader(open('domains.csv', 'rU'))
output = open('output.txt', 'w')
for row in domains:
    try:
        domain = row[0]
        query = dns.resolver.query(domain,'MX')
        query.lifetime = 1.0
    except DNSException:
        print "nothing here"
    for rdata in query:
            print domain, " ", rdata.exchange, 'has preference', rdata.preference
            output.writelines(domain)
            output.writelines(",")
            output.writelines(rdata.exchange.to_text())
            output.writelines("\n")
4

1 に答える 1

25

クエリを既に実行したにタイムアウトを設定しています。それではどうにもなりません!

代わりに、Resolverオブジェクトを作成し、タイムアウトを設定してquery()から、そのメソッドを呼び出します。dns.resolver.query()は、デフォルトResolverオブジェクトをインスタンス化し、そのquery()メソッドを呼び出す便利な関数にすぎないため、デフォルトが必要ない場合は手動で行う必要がありますResolver

resolver = dns.resolver.Resolver()
resolver.timeout = 1
resolver.lifetime = 1

次に、これをループで使用します。

try:
    domain = row[0]
    query = resolver.query(domain,'MX')
except:
    # etc.

Resolverすべてのクエリに同じオブジェクトを使用できる必要があります。

于 2012-01-24T15:53:51.990 に答える