C段http_banner获取
#-*-coding=utf-8-*-#__author__='sanr'#__email__='5754190@qq.com'#__url__='http://0x007.blog.51cto.com/'#__version__='0.1'importrequestsimportrefromthreadingimportThread,Lockimporttimeimportsysimportchardetimportnetaddrimportstructimportsocketlock=Lock()defip2int(addr):returnstruct.unpack("!I",socket.inet_aton(addr))[0]defint2ip(addr):returnsocket.inet_ntoa(struct.pack("!I",addr))defint_dec(pagehtml):'''智能获取页面编码第一步查找charset第二步使用chardect智能匹配'''charset=Noneifpagehtml!='':#print'usecharsetdect'enc=chardet.detect(pagehtml)#print'enc=',encifenc['encoding']andenc['confidence']>0.9:charset=enc['encoding']ifcharset==None:charset_re=re.compile("((^|;)\s*charset\s*=)([^\"']*)",re.M)charset=charset_re.search(pagehtml[:1000])charset=charsetandcharset.group(3)orNone#testcharsettry:ifcharset:unicode('test',charset,errors='replace')exceptException,e:print'Exception',echarset=None#print'charset=',charsetreturncharsetdefhttp_banner(url):ip=urltry:url=requests.get(url,timeout=2)body=url.contentcharset=Noneifbody!='':charset=int_dec(body)ifcharset==Noneorcharset=='ascii':charset='ISO-8859-1'ifcharsetandcharset!='ascii'andcharset!='unicode':try:body=unicode(body,charset,errors='replace')exceptException,e:body=''#获取状态码Struts=url.status_code#获取webserver信息Server=url.headers['server'][0:13]#获取titleifStruts==200orStruts==403orStruts==401:title=re.findall(r"<title>(.*)<\/title>",body)iflen(title):title=title[0].strip()else:title=''#输出加锁防止第二行输入#申请锁lock.acquire()print('%s\t%d\t%-10s\t%s'%(ip.lstrip('http://'),Struts,Server,title))#释放锁lock.release()except(requests.HTTPError,requests.RequestException,AttributeError,KeyError),e:passif__name__=='__main__':iflen(sys.argv)>=2:ips=sys.argv[1]else:print'usage:pythonhttp_banner.py192.168.1./24'print'usage:pythonhttp_banner.py192.168.1.1-192.168.1.254'sys.exit()if'-'inips:start,end=ips.split('-')startlong=ip2int(start)endlong=ip2int(end)ips=netaddr.IPRange(start,end)foripinlist(ips):url='http://%s'%ipt=Thread(target=http_banner,args=(url,))t.daemon=Falset.start()elif'/'inips:ips=netaddr.IPNetwork(ips)foripinlist(ips):url='http://%s'%ipt=Thread(target=http_banner,args=(url,))t.daemon=Falset.start()
附件:http://down.51cto.com/data/2366174声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。