diff --git a/port/httpscan.py b/port/httpscan.py new file mode 100644 index 0000000..d0276a6 --- /dev/null +++ b/port/httpscan.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +#coding:utf-8 +# Author: Zeroh + +import re +import sys +import Queue +import threading +import optparse +import requests +from IPy import IP + +printLock = threading.Semaphore(1) #lock Screen print +TimeOut = 5 #request timeout + +#User-Agent +header = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36','Connection':'close'} + +class scan(): + + def __init__(self,cidr,threads_num): + self.threads_num = threads_num + self.cidr = IP(cidr) + #build ip queue + self.IPs = Queue.Queue() + for ip in self.cidr: + ip = str(ip) + self.IPs.put(ip) + + def request(self): + with threading.Lock(): + while self.IPs.qsize() > 0: + ip = self.IPs.get() + try: + r = requests.Session().get('http://'+str(ip),headers=header,timeout=TimeOut) + status = r.status_code + title = re.search(r'(.*)', r.text) #get the title + if title: + title = title.group(1).strip().strip("\r").strip("\n")[:30] + else: + title = "None" + banner = '' + try: + banner += r.headers['Server'][:20] #get the server banner + except:pass + printLock.acquire() + print "|%-16s|%-6s|%-20s|%-30s|" % (ip,status,banner,title) + print "+----------------+------+--------------------+------------------------------+" + + #Save log + with open("./log/"+self.cidr.strNormal(3)+".log",'a') as f: + f.write(ip+"\n") + + except Exception,e: + printLock.acquire() + finally: + printLock.release() + + #Multi thread + def run(self): + for i in range(self.threads_num): + t = threading.Thread(target=self.request) + t.start() + +if __name__ == "__main__": + parser = optparse.OptionParser("Usage: %prog [options] target") + parser.add_option("-t", "--thread", dest = "threads_num", + default = 10, type = "int", + help = "[optional]number of theads,default=10") + (options, args) = parser.parse_args() + if len(args) < 1: + parser.print_help() + sys.exit(0) + + print "+----------------+------+--------------------+------------------------------+" + print "| IP |Status| Server | Title |" + print "+----------------+------+--------------------+------------------------------+" + + s = scan(cidr=args[0],threads_num=options.threads_num) + s.run()