用python写的一个多线程的端口扫描
来源:互联网 发布:库房管理软件 知乎 编辑:程序博客网 时间:2024/05/22 12:28
#!/usr/bin/env pythonimport socketimport sysimport threadingimport timeNORMAL = 0ERROR = 1TIMEOUT = 5def ping(ip , port , timeout=TIMEOUT):try:cs=socket.socket(socket.AF_INET,socket.SOCK_STREAM)cs.settimeout(float(timeout))address=(str(ip),int(port))status = cs.connect_ex((address))if status == NORMAL :print "%d is NORMAL" %portexcept Exception ,e:print ERRORprint "error:%s" %ereturn ERRORcs.close()return NORMAL class Scan(threading.Thread): def __init__(self , ip , timeout): threading.Thread.__init__(self)self.ip = ipself.timeout = timeout def run(self): global p_begin , p_end , mutex threadname = threading.currentThread().getName() while 1: mutex.acquire() p_begin += 1 if p_begin > p_end: mutex.release() break mutex.release() ping(self.ip , p_begin , self.timeout) if __name__ == '__main__': if len(sys.argv) < 4:print 'format:urlbegin portbegin portend timeout' urlbegin = str(sys.argv[1]) portbegin = int(sys.argv[2]) portend = int(sys.argv[3]) timeout = float(sys.argv[4]) global p_begin , p_end, mutex threads = [] num = 10 p_begin = portbegin p_end = portend mutex = threading.Lock() for x in xrange(0 , num): t_scan = Scan(urlbegin , timeout)t_scan.setDaemon(True) threads.append(t_scan) for t in threads: t.start() for t in threads: t.join()