4

pywhoisを使用して、ドメイン名が登録されているかどうかを判断します。これが私のソースコードです。a.net( からまでのすべての順列zzz.net)

#!/usr/bin/env python
import whois  #pip install python-whois
import string
import itertools

def main():
    characters = list(string.ascii_lowercase)
    ##domain names generator
    for r in range(1, 4) :
        for name in itertools.permutations(characters, r) : #from 'a.net' to 'zzz.net'
            url = ''.join(name) + '.net'

            #check if a domain name is registered or not
            try :
                w = whois.whois(url)
            except (whois.parser.PywhoisError):  #NOT FOUND
                print(url)   #unregistered domain names?

if __name__ == '__main__':
    main()

次の結果が得られました。

jv.net
uli.net
vno.net
xni.net

ただし、上記のドメイン名はすべて登録済みです。正確ではありません。誰でも説明できますか?多くのエラーがあります:

fgets: Connection reset by peer
connect: No route to host
connect: Network is unreachable
connect: Connection refused
Timeout.

ここで報告されている別の方法があります。

import socket   
try:    
    socket.gethostbyname_ex(url) 
except:
    print(url) #unregistered domain names?

速度といえば、私はmap並列処理に慣れています。

def select_unregisteredd_domain_names(self, domain_names):
    #Parallelism using map
    pool = ThreadPool(16)  # Sets the pool size
    results = pool.map(query_method(), domain_names)
    pool.close()  #close the pool and wait for the work to finish
    pool.join()

    return results
4

1 に答える 1

21

これは解決するのが難しい問題であり、ほとんどの人が認識しているよりも難しい問題です。その理由は、あなたにそれを見つけてほしくない人もいるからです。ほとんどのドメイン レジストラは、提供する優れたリストを取得するために多くのブラック マジック (つまり、TLD 固有のハック) を適用しますが、多くの場合、それは間違っています。もちろん、信頼できる回答を保持するEPPアクセスを持っているため、最終的には確実に知ることができます (ただし、通常は「注文」をクリックした場合にのみ行われます)。

あなたの最初の方法 (whois) は以前は優れたものでした。私は、すべてがよりオープンだった 90 年代に大規模にこれを行いました。今日では、多くの TLD がキャプチャや妨害的な Web インターフェイスなどの背後でこの情報を保護しています。他に何もない場合でも、IP ごとのクエリ数に割り当てがあります。(そして、それにも正当な理由があるのか​​もしれません。私は、ドメイン登録に使用する電子メール アドレスに途方もない量のスパムを受け取っていました)。また、クエリで WHOIS データベースをスパムすることは、通常、利用規約に違反しており、レートが制限されたり、ブロックされたり、ISP に悪用レポートを受け取ったりする可能性があることに注意してください.

通常、2 番目の方法 (DNS) の方がはるかに高速です (ただし、gethostbyname を使用しないでください。効率のために Twisted またはその他の非同期 DNS を使用してください)。TLD ごとに取得済みドメインと無料ドメインの応答がどのように見えるかを把握する必要があります。ドメインが解決されないからといって、そのドメインが無料であるとは限りません (単に使用されていない可能性があります)。逆に、一部の TLD には、存在しないすべてのドメインのランディング ページがあります。場合によっては、DNS だけでは判断できないことがあります。

それで、あなたはそれをどのように解決しますか?簡単ではありません。TLD ごとに、DNS と whois データベースを巧みに利用する方法を理解する必要があります。DNS から始めて、難しい場合には他の手段に頼る必要があります。whois データベースがクエリであふれないようにしてください。

別のオプションは、いずれかのレジストラへの API アクセスを取得することです。レジストラは、ドメイン検索へのプログラムによるアクセスを提供する場合があります。

于 2015-07-23T20:38:05.193 に答える