from socket import * import threading #導入線程相關模塊 lock = threading.Lock() openNum = 0 threads = [] #定義線程列表 def portScanner(host,port): global openNum try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) lock.acquire() #由於openNum是個全局變量,每一個線程不能對openNum 同時操做,只有得到所的線程才能夠操做 openNum openNum+=1 print('[+] %d open' % port) lock.release() #線程對全局變量openNum操做完成後,須要釋放所,其餘線程才能夠繼續修改全局變量openNum s.close() except: #若是端口沒開,那麼就直接pass,不執行其餘輸出操做。 pass def main(): setdefaulttimeout(1) ports = [20, 21, 22, 23, 80, 111, 3306] #定義要掃描的端口,也能夠在for中使用range進行定義,看我的需求,例如 for p in range(1,1024): for p in ports: t = threading.Thread(target=portScanner,args=('192.168.60.130',p)) threads.append(t) t.start() for t in threads: #等待線程列表中的因此線程的執行完畢 t.join() print('[*] The scan is complete!') print('[*] A total of %d open port' % (openNum)) if __name__ == '__main__': main()
若是要計算掃描了多久的話,能夠導入time模塊,而後 程序開始運行的時間 減去 程序結束運行的時間 最後輸出時間的差。app