我使用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()
我得到了以下結(jié)果: jv.net
uli.net
vno.net
xni.net
但是,以上所有域名都已注冊.這不準(zhǔn)確.有人能解釋一下嗎?有很多錯誤: fgets: Connection reset by peer
connect: No route to host
connect: Network is unreachable
connect: Connection refused
Timeout.
here報告了另一種方法. 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
解決方法: 這是一個棘手的問題,比大多數(shù)人意識到的要棘手.原因是有些人不希望你發(fā)現(xiàn)這一點.大多數(shù)域名注冊商都會使用大量的黑魔法(即許多特定于TLD的黑客)來獲取他們提供的精彩列表,并且通常他們會弄錯.當(dāng)然,最終他們肯定會知道,因為他們擁有EPP訪問權(quán)限可以保留權(quán)威答案(但通常只有在您點擊“訂單”時才會這樣做). 你的第一種方法(whois)曾經(jīng)是一個很好的方法,而且我在90年代大規(guī)模地做了這個,當(dāng)時一切都更加開放.如今,許多頂級域名(TLD)都會保護(hù)驗證碼和阻礙性網(wǎng)絡(luò)界面背后的信息,以及諸如此類的東西.如果不出意外,每個IP的查詢數(shù)量都會有配額. (并且它也可能是有充分理由的,我過去常常將大量垃圾郵件發(fā)送到用于注冊域名的電子郵件地址).另請注意,通過查詢向其WHOIS數(shù)據(jù)庫發(fā)送垃圾郵件通常會違反其使用條款,您可能會受到限制,阻止甚至向您的ISP收到濫用報告. 您的第二種方法(DNS)通常要快得多(但不要使用gethostbyname,使用Twisted或其他一些異步DNS來提高效率).您需要弄清楚每個TLD對已采用域和免費域的響應(yīng)如何.僅僅因為域沒有解析并不意味著它是免費的(它可能只是未使用).相反,一些TLD擁有所有不存在域的登錄頁面.在某些情況下,單獨使用DNS是不可能的. 那么,你如何解決它?我很害怕,不輕松.對于每個TLD,您需要弄清楚如何巧妙地使用DNS和whois數(shù)據(jù)庫,從DNS開始并在棘手的情況下采用其他方法.確保不要使用查詢來填充whois數(shù)據(jù)庫. 另一個選擇是獲得其中一個注冊商的API訪問權(quán)限,他們可能提供對域搜索的編程訪問. 來源:https://www./content-1-322101.html
|