調用域名註冊api,查詢所有域名組合腳本

免費python學習推薦視頻:  http://edu.51cto.com/course/course_id-1386.html     

    今天有個想法,想查詢所有短域名是否被註冊了,a-z1-9組成的所有3,4位組合的.com域名是否有沒被註冊的,於是開幹,google後知道萬網提供一個api可以查詢, http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=google.com, 後面的google.com可以換做你想查詢的域名,結果會返回一個xml頁面,如下

 <?xml   version="1.0" encoding="gb2312"?>
<property>
<returncode>200</returncode>
<key>google.com</key>
<original>211 : Domain name is not available</original>
</property>

上面的是域名已經被註冊的返回頁面,下面的是域名未被註冊的頁面,代碼分別是211,210

 <?xml version="1.0" encoding="gb2312"?>
<property>
<returncode>200</returncode>
<key>googleloveyou.com</key>
<original>210 : Domain name is available</original>
</property>

 

域名查詢api有了,於是想辦法解決如何生成所有 字母和數字 組成的3,4,5位組合,這是難點,生成所有3位組合,大家很容易解決,但是生成3,4,5位的貌似有點犯難了, google一下沒獲得好的信息,於是自己畫圖,自己想,和朋友求思路,最後終於解決了,思路是 用數字代替字母,

如  string = "abcdefghijklmnopqrstuvwxyz1234567890"

到時生成的4位域名組合爲 aaaa  aaab aaac aaad .... aaba aabb ... ...abaa abab等,轉化成數字分別爲 0000 0001 0002 0003 .... 0010 0011 ... ... 0100 0101 這些數字代表的是string的index,當數字爲字母長度時,上一位數字+1,最後將數字列表轉換成字母列表即可,腳本如下:

 

#!/usr/bin/python
# coding: utf-8
# author: GuangHongwei
# date: 2014/7/28
# mail: 
    
import time
import urllib
import re
api = "http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=%s"  # api地址
string = "abcdefghijklmnopqrstuvwxyz1234567890"                   # 所有字母
string_len = len(string)                                          # 長度
fname = 'name.txt'                                                # 還沒被註冊的域名寫入該文件
suffix = '.com'                                                   # 域名後綴
domain_lenth_range = range(3, 5)                                  # 字母組合的長度,3到5但不包括5

def min(num):
    """初始化第一個值數字列表"""
    name = []
    for i in range(num):
        name.append(0)
    return name
 
def max(num, max_num):
    """返回最大的值數字列表"""
    name =  []
    for i in range(num):
        name.append(max_num)
    return name
    
def num_2_string(name, string):
    """將數字列表轉化爲字母組合列表"""
    new_name = []
    for i in name:
        new_name.append(string[i])
    return ''.join(new_name)  

def is_ava(domain):
    """判斷該域名是否被註冊"""
    data = urllib.urlopen(api % domain).read()
    ava_pattern = re.compile(r'<original>(.*) : .*</original>')
    perm_pattern = re.compile(r'Forbidden')
    result = ava_pattern.findall(data)
    if '210' in result:
        print '%s ---------> Ok' % domain
        return True
    elif '211' in result:
        print '%s ---------> No' % domain
        return False
    else:
        print 'Forbidden'
        return False
        
def domain_name(num):
    """域名組合生成器"""
    name = min(num)
    last = max(num, string_len-1)
    while True:
        yield num_2_string(name, string)
        if name == last:
            break
        name[num-1] += 1
        while string_len in name:
            index = name.index(string_len)
            name[index] = 0
            name[index-1] += 1
            
def run(domain_lenth):
    """執行,如果每被註冊就寫到文件中"""
    f = open(fname, 'a')
    for domain in domain_name(domain_lenth):
        domain += suffix
        if is_ava(domain):
            f.write('%s\n' % domain)
            f.flush()
        time.sleep(0.5)
    
 
if __name__ == '__main__':
    """最終執行, 循環執行每種長度組合"""
    for i in domain_lenth_range:
        run(i)

 

 腳本可以通過附件下載,直接運行即可,結果如下

wKioL1PVwSegbm3OAAGvRXS6dG0334.jpg

 

最後,由於萬網的api,查詢過於頻繁,時間間隔太短,很快就會被封ip的,注意些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章