1

キャッシュ DNS サーバーのドメイン名のリストをプリフェッチするスクリプトを作成したいと考えています。ここでは、Alexa からアクセスされたトップ 1,000,000 の Web サイトを使用しています。

http://s3.amazonaws.com/alexa-static/top-1m.csv.zip

この CSV ファイルを読み取り、リストされている各ドメイン名に対して "nslookup" (またはより効率的な方法) を実行する Python スクリプトを作成するにはどうすればよいでしょうか。おそらく各クエリ間にわずかな遅延がありますか? または、これを行うより良い方法はありますか?

メモリ使用量を最小限に抑えるために、CSV を一度にすべて読み取るのではなく、1 行ずつ処理するのが最も効率的だと思います。

具体的には、この問題に取り組むための戦略を探しています (ライブラリ、ツールなど...)。サンプル コードを歓迎しますが、必須ではありません。

4

2 に答える 2

3

必要なものはすべて提供されているので、Python 標準モジュールをそのまま使用できます。

open(ファイル全体をメモリにロードせずに) 反復可能なファイル オブジェクトを返すため、次のようなコードを使用できます。

from socket import gethostbyaddr 

with open('top-1m.csv') as input:
    for line in input:
        index, host = line.strip().split(',')
        try: 
            output = gethostbyaddr(host)
            print "%s %s is %s/%s" % (index, host, output[0], output[2])
        except: 
            print host, "not found"

結果:

1 facebook.com は www-slb-10-08-prn1.facebook.com/['69.171.234.21']
2 google.com は fra07s07-in-f100.1e100.net/['209.85.148.100']
3 youtube .com は fra07s07-in-f93.1e100.net/['209.85.148.93']
4 yahoo.com は ir2.fp.vip.bf1.yahoo.com/['98.139.183.24']
baidu.com が見つかりません

csv各行には常に 2 つの値しかないため、ここではお勧めしません。引用文字などを処理する必要がある場合や、csv ファイルなどを書き込む必要がある場合に使用します。

ネットワーキング用の優れたモジュールでもありますが、このtwistedような単純なタスクには少しやり過ぎです。socketモジュールを使用するだけです。

于 2012-08-21T13:12:06.920 に答える
0

モジュール、そしてcsvもちろん、行ごとに読むだけです。DNS ルックアップを行うには、twisted.names.clientを使用することをお勧めします。

于 2012-08-21T13:04:58.797 に答える