# -*- coding: gb18030 -*- from subprocess import * import socket,httplib2 import sys,os,socket,threading from bs34 import BeautifulSoup34 import json,urllib2,urllib from urlparse import urlparse as up import simplejson,pprint class target(object): def __init__(self,domain): self.domain=domain self.ips=[] self.subdomain=[] self.ipinfo=[] self.iprinfo=[] self.samesite=[] self.url=r'http://cn.bing.com/search?count=100&q=ip:' self.subdomainurl=r'https://ajax.googleapis.com/ajax/services/search/web?v=1.0&start={}&rsz=8&q=site:{}' self.httphead={ 'User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; http://bsalsa.com) ; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152)', 'Cookie':'SRCHUID=V=2&GUID=79E9F92F75B54E60B4588D130264EFD4; MUID=0A81369FC80C6E532B69359EC9026E42; SRCHD=SM=1&MS=2196069&D=2160426&AF=NOFORM; SRCHUSR=AUTOREDIR=0&GEOVAR=&DOB=20120209; _SS=SID=C8C39DCC3EA342E2859C472E445A1BEC; _UR=D=0; RMS=F=O&A=Q; SCRHDN=ASD=0&DURL=#', 'Referer':'http://cn.bing.com/'} self.portlist=[21,22,23,25,53,80,81,110,139,135,443,445,1723,2012,3389,1433,3306,1521,8080,8089,8090,3128,5900] self.op=[] self.ipq=r'http://api.ipinfodb.com//v2/ip_query.php?key=5eb5b4de91741e2e4b98748989dc84f3236b55f6dd38aa689921884867536f36&ip={}&output=json&timezone=false' self.getips() self.trac() self.scanport() self.getsubdomain() self.getpzinfo() self.disp() #--------------------------------获得ip,srver 信息---------------------------- def getips(self): h=httplib2.Http() res,_=h.request(r'http://'+self.domain,headers=self.httphead) _,con=h.request(self.ipq.format(self.domain)) con=json.loads(con) for i in socket.gethostbyname_ex(self.domain)[2]: self.ips.append(i) self.ipinfo.append((res.get('server'),res.get('x-powered-by'),con.get("CountryName"),con.get("RegionName"),con.get("City"))) #--------------------------------路由跟踪代码---------------------------- def trac(self): p=Popen(['tracert',self.domain,'-h','20',],shell=False,stdout=PIPE) data=p.stdout.readline() while data: #if "*" in data:break d=data.strip().split() if len(d)==8:self.iprinfo.append((d[7],d[7])) if len(d)==9:self.iprinfo.append((d[7],d[8][1:-1])) data=p.stdout.readline() #--------------------------------获得目标子域信息-------------------------- def getsubdomain(self): for n in range(1,200,8): request = urllib2.Request(self.subdomainurl.format(n,self.domain[self.domain.index('.')+1:]), None, {'Referer': 'http://www.baidu.com'}) try:info=simplejson.load(urllib2.urlopen(request))['responseData']['results'] except Exception as err:break for i in info: for l in i: if l=='url': self.subdomain.append( up(i[l]).netloc.encode() ) self.subdomain=list(set(self.subdomain)) #--------------------------------胖猪代码---------------------------- def getpzinfo(self): ip=socket.gethostbyname(self.domain.strip()) h=httplib2.Http() res,cont=h.request(self.url+ip,headers=self.httphead) soup=BeautifulSoup(cont) for i in soup.findAll('div',attrs={'class':'sb_tlst'}): self.samesite.append(up(i.a['href']).netloc.encode()) self.samesite=list(set(self.samesite)) #///////////////////////////////////////////////////////////////////////////////////////////////////////////////// #---------------------------端口扫描代码------------------------------- def conport(self,tar,port): s=socket.socket() s.settimeout(3) try:s.connect((tar,port));self.op.append(port) except Exception as err:pass finally:s.close() def scanport(self): tlist=[] for i in self.portlist: for l in self.ips: tlist.append(threading.Thread(target=self.conport,args=((l,i)))) for i in tlist: i.start() for i in tlist: i.join() del tlist def disp(self): f=open(r'./txt/'+self.domain+'.txt','at') print >>f,"目标域名:\n",self.domain print "目标域名:\n",self.domain if len(self.samesite)>1: print >>f,"目标为虚拟主机" print "目标为虚拟主机" print >>f,"IP地址 :" pprint.pprint (self.ips,f) print "IP地址 :" pprint.pprint (self.ips) print >>f,"目标地址信息: " pprint.pprint (self.ipinfo,f) print "目标地址信息: " pprint.pprint (self.ipinfo) print >>f,"目标路由跟踪信息: " pprint.pprint (self.iprinfo,f) print "目标路由跟踪信息: " pprint.pprint (self.iprinfo) print >>f,"目标的开放端口信息: " pprint.pprint (self.op,f) print "目标的开放端口信息: " pprint.pprint (self.op) print >>f,"目标的子域信息:" pprint.pprint (self.subdomain,f) print "目标的子域信息:" pprint.pprint (self.subdomain) print >>f,"目标的同站服务器信息:" pprint.pprint (self.samesite,f) print "目标的同站服务器信息:" pprint.pprint (self.samesite) print >>f,"*"*30+'\r\n\r\n' print "*"*30+'\r\n\r\n'