首页 > 上网技巧 > 电脑小技巧 > Python爆破二级域名 子域名挖掘机

Python爆破二级域名 子域名挖掘机

时间:2016-09-26 17:27 作者:QQ地带 我要评论

 

  1. #!/usr/bin/env python 
  2. # -*- coding: utf-8 -*- 
  3.  
  4. import dns.resolver 
  5. import threading 
  6. import Queue 
  7. import optparse 
  8. import sys 
  9.  
  10. queue = Queue.Queue() 
  11. lock = threading.Lock() 
  12.  
  13. class GetSubDomain(threading.Thread): 
  14.     """docstring for SubDomain""" 
  15.     def __init__(self, target,queue,outfile): 
  16.         threading.Thread.__init__(self
  17.         self.target = target 
  18.         self.queue = queue 
  19.         self.rsv = dns.resolver.Resolver() 
  20.         outfile = target + '.txt' if not outfile else outfile 
  21.         self.f = open('./output/'+outfile,'a+'
  22.         self.ip_list = [] 
  23.  
  24.     def _scan(self): 
  25.         while not self.queue.empty(): 
  26.             self.ip_list = [] 
  27.             ips = None 
  28.             sub_domain = self.queue.get() + '.' + self.target 
  29.             for _ in range(3): 
  30.                 try
  31.                     answers = self.rsv.query(sub_domain) 
  32.                     if answers: 
  33.                         for answer in answers: 
  34.                             if answer.address not in self.ip_list: 
  35.                                 self.ip_list.append(answer.address) 
  36.                 except dns.resolver.NoNameservers, e: 
  37.                     break 
  38.                 except Exception, e: 
  39.                     pass 
  40.             if len(self.ip_list)>0
  41.                 ips = ','.join(self.ip_list) 
  42.                 msg = sub_domain.ljust(30) + ips + '\n' 
  43.                 lock.acquire() 
  44.                 print msg 
  45.                 self.f.write(msg) 
  46.                 lock.release() 
  47.             self.queue.task_done() 
  48.  
  49.     def run(self): 
  50.         self._scan() 
  51.  
  52. def get_target(domain_list): 
  53.     targets = [] 
  54.     for line in open(domain_list,'r'): 
  55.         if line: 
  56.             targets.append(line.strip()) 
  57.     return targets 
  58.  
  59. def get_sub_queue(sub_file): #得到所有子域名的queue 
  60.     for line in open(sub_file,'r'): 
  61.         if line: 
  62.             queue.put(line.strip()) 
  63.  
  64. def main(): 
  65.     parser = optparse.OptionParser() 
  66.     parser.add_option('-u''--url', dest='url'
  67.         type='string', help='Get a single top-level domain names.'
  68.     parser.add_option('-l''--list', dest='domain_list'
  69.         type='string', help='Top-level domain name list.'
  70.     parser.add_option('-f''--file', dest='sub_file', default='sub.txt'
  71.         type='string', help='Dict file used to brute sub names'
  72.     parser.add_option('-t''--threads', dest='threads_num', default=60,  
  73.         type='int', help='Number of threads. default = 60'
  74.     parser.add_option('-o''--outfile', dest='outfile', default=None
  75.         type='string', help='Output file name. default is {target}.txt'
  76.  
  77.     (options, args) = parser.parse_args() 
  78.     if options.url: 
  79.         urls = [options.url] 
  80.     elif options.domain_list: 
  81.         urls = get_target(options.domain_list) 
  82.     else
  83.         parser.print_help() 
  84.         print "Example: " 
  85.         print "\tpython getsub.py -u baidu.com" 
  86.         print "\tpython getsub.py -l domain.txt -f sub.txt -t 50" 
  87.         sys.exit(0
  88.  
  89.     for url in urls: 
  90.         get_sub_queue(options.sub_file) 
  91.         for x in xrange(1,options.threads_num+1): 
  92.             t = GetSubDomain(url,queue,options.outfile) 
  93.             t.setDaemon(True
  94.             t.start() 
  95.         queue.join() 
  96.  
  97. if __name__ == '__main__'
  98.     main() 

 


标签: Python
顶一下
(1)
100%
踩一下
(0)
0%

Google提供的广告