diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba74660 --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ diff --git a/brodomain.py b/brodomain.py index de5dd8b..5425ab8 100644 --- a/brodomain.py +++ b/brodomain.py @@ -1,214 +1,229 @@ -#coding=utf-8 -#author=cond0r +#!/usr/bin/env python +# coding=utf-8 +# author=cond0r + import urllib2 import re +import sys + from urllib import unquote from urllib import quote -from binascii import b2a_base64 as base64_encode -from binascii import a2b_base64 as base64_decode from sys import argv -from Queue import Queue -import sys + import lib.mthread + + class aizhan: - def __init__(self,domain='',mail='',name=''): - self.domain=domain - self.domain_beian=domain - self.mail=mail - self.name=name - self.GetMailByDomain_regx='' - self.GetSameDomainByEmailCode_mail='onClick="DisplayAllSitesBox\(\);" value="(.*)" />' - self.GetSameDomainByEmailCode_domain='' - self.GetRegname_regx='' - self.GetRegname_List='' - self.SameDomain=[] - self.RegEmail='' - self.RegName='' - self.RegName_List=[] - self.BroDomain=[] - - def AppendDomain(self,Dlist): - for D in Dlist: - self.SameDomain.append(D) - def AppendBro(self,Dlist): - for D in Dlist: - if D not in self.BroDomain: - #print D - self.BroDomain.append(D) - def AppendRegName(self,Rlist): - for R in Rlist: - if R not in self.RegName_List: - self.RegName_List.append(R) - - def GetDomainFromReglist(self): - Domain=[] - i=1; - for N in self.RegName_List: - print i, - i+=1 - dom=self.GetSameDomainByEmailCode(N,3,True) - self.AppendBro(dom) - - #return Domain - def GetDomainBybeian(self,domain='',backquery=False): - if domain: - self.domain_beian=domain - url='http://codescan.cn/beian.php?query=%s'%self.domain_beian - data=urllib2.urlopen(url).read() - r=re.findall('([\s\S]*?)',data) - #print r - dlist=[] - for i in r: - - i=i.replace(' ','').replace('\n','').replace('\r','') - if 'ICP' in i and backquery==False: - beian=i - if '-' in beian: - beian=beian.split('-')[0] - self.GetDomainBybeian(beian,True) - break - if '.' in i : - dlist.append(i) - #print i - self.AppendBro(dlist) - - - def GetSameDomainByEmailCode(self,emailcode,code=1,appends=False): - if code==1: - url="http://whois.aizhan.com/reverse-whois?q=%s&t=emailCode"%quote(emailcode) - elif code==2: - url="http://whois.aizhan.com/reverse-whois?q=%s&t=email"%quote(emailcode) - elif code==3: - url="http://whois.aizhan.com/reverse-whois?q=%s&t=registrant"%quote(emailcode) - #print url - data=urllib2.urlopen(url).read() - email=re.findall(self.GetSameDomainByEmailCode_mail,data) - if len(email)==1: - email=email[0] - else: - email='' - domain=re.findall(self.GetSameDomainByEmailCode_domain,data) - if len(domain)==0: - domain='' - if appends: - return domain - self.AppendDomain(domain) - if code==2 or code==1: - self.RegEmail=email - regname_list=re.findall(self.GetRegname_List,data) - self.AppendRegName(regname_list) - - def GetMailByDomain(self): - url="http://whois.aizhan.com/reverse-whois?q=%s&t=domain"%self.domain - #print url - data=urllib2.urlopen(url).read() - reg=re.findall(self.GetMailByDomain_regx,data) - if len(reg)==1: - reg=unquote(reg[0]) - self.GetSameDomainByEmailCode(reg) - reg_name=re.findall(self.GetRegname_regx,data) - if len(reg_name)==1: - self.RegName=reg_name[0] - self.GetSameDomainByEmailCode(self.RegName,3) -result=[] -def stdout( name): - global result - scanow ='[*] Find %s of %d'%(name,len(result)) - sys.stdout.write(str(scanow)+" "*20+"\b\b\r") - sys.stdout.flush() + def __init__(self, domain='', mail='', name=''): + self.domain = domain + self.domain_beian = domain + self.mail = mail + self.name = name + self.GetMailByDomain_regx = '' + self.GetSameDomainByEmailCode_mail = 'onClick="DisplayAllSitesBox\(\);" value="(.*)" />' + self.GetSameDomainByEmailCode_domain = '' + self.GetRegname_regx = '' + self.GetRegname_List = '' + self.SameDomain = [] + self.RegEmail = '' + self.RegName = '' + self.RegName_List = [] + self.BroDomain = [] + + def AppendDomain(self, Dlist): + for D in Dlist: + self.SameDomain.append(D) + + def AppendBro(self, Dlist): + for D in Dlist: + if D not in self.BroDomain: + # print D + self.BroDomain.append(D) + + def AppendRegName(self, Rlist): + for R in Rlist: + if R not in self.RegName_List: + self.RegName_List.append(R) + + def GetDomainFromReglist(self): + Domain = [] + i = 1 + for N in self.RegName_List: + print i, + i += 1 + dom = self.GetSameDomainByEmailCode(N, 3, True) + self.AppendBro(dom) + + # return Domain + + def GetDomainBybeian(self, domain='', backquery=False): + if domain: + self.domain_beian = domain + url = 'http://codescan.cn/beian.php?query=%s' % self.domain_beian + data = urllib2.urlopen(url).read() + r = re.findall('([\s\S]*?)', data) + # print r + dlist = [] + for i in r: + + i = i.replace(' ', '').replace('\n', '').replace('\r', '') + if 'ICP' in i and backquery: + beian = i + if '-' in beian: + beian = beian.split('-')[0] + self.GetDomainBybeian(beian, True) + break + if '.' in i: + dlist.append(i) + # print i + self.AppendBro(dlist) + + def GetSameDomainByEmailCode(self, emailcode, code=1, appends=False): + if code == 1: + url = "http://whois.aizhan.com/reverse-whois?q=%s&t=emailCode" % quote(emailcode) + elif code == 2: + url = "http://whois.aizhan.com/reverse-whois?q=%s&t=email" % quote(emailcode) + elif code == 3: + url = "http://whois.aizhan.com/reverse-whois?q=%s&t=registrant" % quote(emailcode) + # print url + data = urllib2.urlopen(url).read() + email = re.findall(self.GetSameDomainByEmailCode_mail, data) + if len(email) == 1: + email = email[0] + else: + email = '' + domain = re.findall(self.GetSameDomainByEmailCode_domain, data) + if len(domain) == 0: + domain = '' + if appends: + return domain + self.AppendDomain(domain) + if code == 2 or code == 1: + self.RegEmail = email + regname_list = re.findall(self.GetRegname_List, data) + self.AppendRegName(regname_list) + + def GetMailByDomain(self): + url = "http://whois.aizhan.com/reverse-whois?q=%s&t=domain" % self.domain + # print url + data = urllib2.urlopen(url).read() + reg = re.findall(self.GetMailByDomain_regx, data) + if len(reg) == 1: + reg = unquote(reg[0]) + self.GetSameDomainByEmailCode(reg) + reg_name = re.findall(self.GetRegname_regx, data) + if len(reg_name) == 1: + self.RegName = reg_name[0] + self.GetSameDomainByEmailCode(self.RegName, 3) +result = [] + + +def stdout(name): + global result + scanow = '[*] Find %s of %d' % (name, len(result)) + sys.stdout.write(str(scanow)+" "*20+"\b\b\r") + sys.stdout.flush() + + def prints(d): - global result,data,over - if d=='Ennnnnnd': - if over==1: - return 0 - over=1 - data+="SubDomain\n" - for p in result: - if p: - p=p.replace("http://","").replace("https://","").replace("/","") - data+=p+"\n" - print "[*] Query Over,Result is in %s.log" %argv[1] - open('./log/%s.log'%argv[1],'w').write(data) - return 1 - for i in d: - stdout(i) - result.append(i) -result_ip=[] + global result, data, over + if d == 'Ennnnnnd': + if over == 1: + return 0 + over = 1 + data += "SubDomain\n" + for p in result: + if p: + p = p.replace("http://", "").replace("https://", "").replace("/", "") + data += p+"\n" + print "[*] Query Over,Result is in %s.log" % argv[1] + open('./log/%s.log' % argv[1], 'w').write(data) + return 1 + for i in d: + stdout(i) + result.append(i) + +result_ip = [] + + def prints_ip(d): - global result_ip,data,over - if 'Ennnn' not in d: - result_ip.append(d) + global result_ip, data, over + if 'Ennnn' not in d: + result_ip.append(d) def write_html(dicts): - html="" - for key,value in dicts.items(): - #print key,value - if value!='': - data='''
  • - - -
  • - '''.replace("{Domain}",key) - li="" - - for d in value.split(","): - if d: - li+='
  • '+d+'
  • ' - data=data.replace("{li}",li) - html+=data - - htmls=open('./log/result.template').read() - htmls=htmls.replace("{html}",html) - open('./log/'+argv[1]+".html",'w').write(htmls) -over=0 -if len(argv)!=2: - print ''' - 88888888ba - 88 "8b - 88 ,8P - 88aaaaaa8P' 8b,dPPYba, ,adPPYba, - 88""""""8b, 88P' "Y8 a8" "8a - 88 `8b 88 8b d8 - 88 a8P 88 "8a, ,a8" - 88888888P" 88 `"YbbdP"' - ver 1.0 - By Cond0r - codescan.cn & pwn.ren - Usage: python brodomain.py codescan.cn - - ''' - exit() + html = "" + for key, value in dicts.items(): + # print key,value + if value != '': + data = '''
  • + + +
  • + '''.replace("{Domain}", key) + li = "" + + for d in value.split(","): + if d: + li += '
  • ' + d + '
  • ' + data = data.replace("{li}", li) + html += data + + htmls = open('./log/result.template').read() + htmls = htmls.replace("{html}", html) + open('./log/'+argv[1]+".html", 'w').write(htmls) + +over = 0 + + +if len(argv) != 2: + print ''' + 88888888ba + 88 "8b + 88 ,8P + 88aaaaaa8P' 8b,dPPYba, ,adPPYba, + 88""""""8b, 88P' "Y8 a8" "8a + 88 `8b 88 8b d8 + 88 a8P 88 "8a, ,a8" + 88888888P" 88 `"YbbdP"' + ver 1.0 + By Cond0r + codescan.cn & pwn.ren + Usage: python brodomain.py codescan.cn + + ''' + exit() print "[*] Init.." -query=aizhan(argv[1]) +query = aizhan(argv[1]) print "[*] Query Email.." query.GetMailByDomain() print "[*] Query Beian Code.." query.GetDomainBybeian() print "[*] Query All Domain Waiting.." print "[*] Query ", -#query.GetDomainFromReglist() -data="Email: %s\nRegistrant: %s\n"%(query.RegEmail,query.RegName) -data+="BroDmain Count:%d\n"%len(query.BroDomain) -print "\n[*] BroDmain Count:%d\n"%len(query.BroDomain) +# query.GetDomainFromReglist() +data = "Email: %s\nRegistrant: %s\n" % (query.RegEmail, query.RegName) +data += "BroDmain Count:%d\n" % len(query.BroDomain) +print "\n[*] BroDmain Count:%d\n" % len(query.BroDomain) for D in query.BroDomain: - D=D.replace("http://","").replace("https://","").replace("/","") - data+=D+"\n" -m=lib.mthread.run(query.BroDomain,prints) -m=lib.mthread.runip(result,prints_ip) -dicts={} + D = D.replace("http://", "").replace("https://", "").replace("/", "") + data += D+"\n" +m = lib.mthread.run(query.BroDomain, prints) +m = lib.mthread.runip(result, prints_ip) +dicts = {} for Ds in query.BroDomain: - Ds=Ds.replace("http://www",'') - Ds=Ds.replace("/",'') - #print Ds - dicts.update({Ds:''}) - for D in result: - #print D - if Ds in D: - #print D - data=dicts[Ds] - dicts.update({Ds:data+","+D}) -print "[*] Html Result in "+argv[1]+".html" + Ds = Ds.replace("http://www", '') + Ds = Ds.replace("/", '') + # print Ds + dicts.update({Ds: ''}) + for D in result: + # print D + if Ds in D: + # print D + data = dicts[Ds] + dicts.update({Ds: data + "," + D}) +print "[*] Html Result in " + argv[1] + ".html" write_html(dicts) diff --git a/lib/__init__.pyc b/lib/__init__.pyc deleted file mode 100644 index bdb471b..0000000 Binary files a/lib/__init__.pyc and /dev/null differ diff --git a/lib/mthread.pyc b/lib/mthread.pyc deleted file mode 100644 index ed97af9..0000000 Binary files a/lib/mthread.pyc and /dev/null differ