http_banner获取2.0
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,更新如下端口可自定义 默认80线程可自定义 默认10使用了队列存消息#-*-coding=utf-8-*-# __author__ = 'sanr'# __email__ = '5754190@
千家信息网最后更新 2026年10月31日http_banner获取2.0
更新如下
端口可自定义 默认80
线程可自定义 默认10
使用了队列存消息
#-*-coding=utf-8-*-# __author__ = 'sanr'# __email__ = '5754190@qq.com'# __url__ = 'http://0x007.blog.51cto.com/'# __version__ = '2.0'import requestsimport reimport sysfrom threading import Thread,Lockimport Queueimport chardetimport netaddrimport socketimport structimport optparseimport osimport timelock = Lock()q = Queue.Queue()def ip2int(addr): return struct.unpack("!I", socket.inet_aton(addr))[0]def int2ip(addr): return socket.inet_ntoa(struct.pack("!I", addr)) def int_dec(pagehtml): ''' 智能获取页面编码 第一步查找charset 第二步使用chardect智能匹配 ''' charset = None if pagehtml != '': # print 'use charset dect' enc = chardet.detect(pagehtml) # print 'enc= ', enc if enc['encoding'] and enc['confidence'] > 0.9: charset = enc['encoding'] if charset == None: charset_re = re.compile("((^|;)\s*charset\s*=)([^\"']*)", re.M) charset=charset_re.search(pagehtml[:1000]) charset=charset and charset.group(3) or None # test charset try: if charset: unicode('test',charset,errors='replace') except Exception,e: print 'Exception',e charset = None # print 'charset=', charset return charsetdef http_banner(): while True: try: if q.qsize() == 0: break; ip = q.get() url='http://%s:%s'%(ip,port) url=requests.get(url,timeout=2) body = url.content charset = None if body != '': charset = int_dec(body) if charset == None or charset == 'ascii': charset = 'ISO-8859-1' if charset and charset != 'ascii' and charset != 'unicode': try: body = unicode(body,charset,errors='replace') except Exception, e: body = '' #获取状态码 Struts=url.status_code #获取webserver信息 Server=url.headers['server'][0:13] #获取title if Struts==200 or Struts==403 or Struts==401: title=re.findall(r"(.*)<\/title>",body) if len(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: passdef main(ips,threads=10): if '-' in ips: start, end = ips.split('-') startlong = ip2int(start) endlong = ip2int(end) ips = netaddr.IPRange(start,end) for ip in list(ips): q.put(str(ip)) elif '/' in ips: ips = netaddr.IPNetwork(ips) for ip in ips: q.put(str(ip)) ths = [] for i in xrange(threads): th = Thread(target=http_banner,name='thread'+str(i)) th.start() ths.append(th) if __name__ == '__main__': parser = optparse.OptionParser('usage: %prog [options] target') parser.add_option('-p', '--port', dest='port', default='80',type='string', help='Port.default = 80') parser.add_option('-t', '--threads', dest='threads_num',default=10, type='int',help='Number of threads. default = 10') (options,args) = parser.parse_args() if len(args) < 1: parser.print_help() print 'usage: python %s 218.92.227.1-218.92.227.254'%os.path.basename(sys.argv[0]) print 'usage: python %s 218.92.227.1/24 '%os.path.basename(sys.argv[0]) print 'usage: python %s 218.92.227.1/24 -p 8080'%os.path.basename(sys.argv[0]) print 'usage: python %s 218.92.227.1/24 -t 100 -p 8080'%os.path.basename(sys.argv[0]) sys.exit(0) ips=args[0] port=options.port threads = options.threads_num main(ips,int(threads))
智能
信息
消息
状态
端口
线程
编码
队列
页面
更新
输入
输出
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海挚品互联网科技有限公司
互联网加科技
互联网是不是新科技
北京互联网科技
善班互联网科技有限公司
互联网科技ppt模板
唐信互联网科技 大连
互联网科技公司名称
互联网科技教育视频
重庆互联网医院沙龙医盟信息科技
赶超互联网科技 微信多开
呼和浩特新华互联网科技学院
乌鲁木齐新华智原互联网科技学校
互联网科技如何创业
互联网营销推广黑科技
福州德业互联网科技
互联网科技企业商标注意事项
恒生科技互联网指数十大成分股
山东亿川互联网科技有限责任公司
株洲百竞科技的互联网营销顾问
互联网金融科技
美国互联网科技巨头监管
互联网 科技创新
奇酷互联网络科技公司
中国最先进互联网科技公司
互联网科技产业特征
互联网科技扶贫时间
互联网数据科技专业
互联网与数字科技关系
互联网科技创新方面的资料