呼叫域名註冊api,查詢所有域名組合指令碼

腫諏遜汲發表於2020-09-21

  今天有個想法,想查詢所有短域名是否被註冊了,a-z1-9組成的所有3,4位組合的.com域名是否有沒被註冊的,於是開幹,google後知道萬網提供一個api可以查詢, 後面的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 = "%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的,注意些。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69920892/viewspace-2722832/,如需轉載,請註明出處,否則將追究法律責任。

相關文章