http_banner获取2.0

更新如下

  1. 端口可自定义 默认80
  2. 线程可自定义 默认10
  3. 使用了队列存消息
#-*-coding=utf-8-*-
# __author__  = ‘sanr‘
# __email__   = ‘[email protected]‘
# __url__     = ‘http://0x007.blog.51cto.com/‘
# __version__ = ‘2.0‘
import requests
import re
import sys
from threading import Thread,Lock
import Queue
import chardet
import netaddr
import socket
import struct
import optparse
import os
import time

lock = 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 = 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 charset

def 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

			Server=url.headers[‘server‘][0:13]

			if Struts==200 or Struts==403 or Struts==401:
				title=re.findall(r"<title>(.*)<\/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:
			pass

def 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))
	
时间: 2024-10-19 21:39:31

http_banner获取2.0的相关文章

iOS获取当天0点

最近一个公司一个项目里有个坑,显示不了0点的数据,修改起始时间为前一天23点59分59秒则可以显示. 查看了获取当天0点代码,和网上查到的结果基本一致,如下所示(使用Category On NSDate): 1 - (NSDate *)zeroOfDate 2 { 3 NSCalendar *calendar = [NSCalendar currentCalendar]; 4 NSDateComponents *components = [calendar components:NSUInteg

C段http_banner获取

#-*-coding=utf-8-*- # __author__  = 'sanr' # __email__   = '[email protected]' # __url__     = 'http://0x007.blog.51cto.com/' # __version__ = '0.1' import requests import re from threading import Thread,Lock import time import sys import chardet impo

C段http_banner获取v0.2

#-*-coding=utf-8-*- # __author__  = 'sanr' # __email__   = '[email protected]' # __url__     = 'http://0x007.blog.51cto.com/' # __version__ = '0.2' import requests import re from threading import Thread,Lock import time import sys import chardet impo

C段http_banner获取v0.3

更新: 1.使用optparse来获取命令行参数 #-*-coding=utf-8-*- # __author__  = 'sanr' # __email__   = '[email protected]' # __url__     = 'http://0x007.blog.51cto.com/' # __version__ = '0.3' import requests import re from threading import Thread,Lock import sys import

.NET获取IIS7.0及以上版本托管服务信息

近期写了个扫描IIS托管站点然后定期注册到Consul的小工具,随意网上拷贝了个帮助类,搞完本机测试没问题,扔到服务器发现硕大的一个异常.. System.Runtime.InteropServices.COMException (0x80005000): 未知错误(0x80005000) 在 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) 在 System.DirectoryServices.Directory

关于获取android6.0的mac地址

原文:http://blog.csdn.net/suziluo123/article/details/51382410 最近接触6.0,发现使用单纯的wifiManager.getConnectionInfo().getMacAddress();方法获取不到MAc地址.后来Google一下发现 Google对硬件信息的访问,其管控更加严格.SD 卡的读写,除了权限声明之外,还应该动态请求,否则就会被禁止.至于 MAC 网络地址的获取,相应的 API 返回的最新结果都是 02:00:00:00:0

SQL获取前一天0:00:00至23:59:59数据

一.前言 因为我公司要做财务结算前一天0:00:00至23:59:59的数据,利用到动态拼接SQL语句 我们需要明白声明DateTime 和 Date 获取的时间格式是不一样的,所以通过此计算有利于得到我们需要的时间段数据 二.测试数据展示(自己看print结果) DECLARE @startDate DATE; DECLARE @startDateTime DATETIME; DECLARE @endDateTime DATETIME ; SET @startDate=GETDATE(); S

快速获取当天0点0分0秒(00:00:00)

// 获取当天凌晨0点0分0秒Date Calendar calendar1 = Calendar.getInstance(); calendar1.set(calendar1.get(Calendar.YEAR), calendar1.get(Calendar.MONTH), calendar1.get(Calendar.DAY_OF_MONTH), 0, 0, 0); Date beginOfDate = calendar1.getTime(); System.out.println(beg

获取UTC+0时间的批处理

@echo off call :getUTCTime echo %UTCTIMESTR% exit /b :getUTCTime FOR /F "usebackq tokens=1,2 delims==" %%i IN (`wmic path win32_utctime get /format:list^|find "="`) DO ( if "%%i" EQU "Year" set YY=%%j if "%%i&q