這篇文章主要介紹了Python實現的連接埠掃描功能,在這裡分享給大家,需要的朋友可以參考下
本文執行個體講述了Python實現的連接埠掃描功能。分享給大家供大家參考,具體如下:
一 代碼
import sysimport socketimport multiprocessingdef ports(ports_service): #擷取常用連接埠對應的服務名稱 for port in list(range(1,100))+[143,145,113,443,445,3389, 8080]: try: ports_service[port] = socket.getservbyport(port) except socket.error: passdef ports_scan(HOST, ports_service): ports_open = [] try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #sock.settimeout(60) except socket.error: print('socket creation error') sys.exit() for port in ports_service: try: #嘗試串連指定連接埠 sock.connect((HOST,port)) #記錄開啟的連接埠 ports_open.append(port) sock.close() except socket.error: pass return ports_openif __name__=='__main__': m = multiprocessing.Manager() ports_service = dict() results = dict() ports(ports_service) #建立進程池,允許最多8個進程同時運行 pool = multiprocessing.Pool(processes=8) net = '192.168.0.' for host_number in map(str,range(105,106)): host = net+host_number #建立一個新進程,同時記錄其運行結果 results[host] = pool.apply_async(ports_scan, (host, ports_service)) print('starting '+host+'...') #關閉進程池,close()必須在join()之前調用 pool.close() #等待進程池中的進程全部執行結束 pool.join() #列印輸出結果 for host in results: print('='*30) print(host,'.'*10) for port in results[host].get(): print(port, ':', ports_service[port])
二 運行結果
starting 192.168.0.105...
==============================
192.168.0.105 ..........
80 : http
相關推薦:
python實現用產生器實現可迭代對象的方法
Python實現的HMacMD5密碼編譯演算法樣本_python