本文實例講述了Python實現(xiàn)的端口掃描功能。分享給大家供大家參考,具體如下:
一 代碼
import sysimport socketimport multiprocessingdef ports(ports_service): #獲取常用端口對應(yīng)的服務(wù)名稱 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) #創(chuàng)建進程池,允許最多8個進程同時運行 pool = multiprocessing.Pool(processes=8) net = '192.168.0.' for host_number in map(str,range(105,106)): host = net+host_number #創(chuàng)建一個新進程,同時記錄其運行結(jié)果 results[host] = pool.apply_async(ports_scan, (host, ports_service)) print('starting '+host+'...') #關(guān)閉進程池,close()必須在join()之前調(diào)用 pool.close() #等待進程池中的進程全部執(zhí)行結(jié)束 pool.join() #打印輸出結(jié)果 for host in results: print('='*30) print(host,'.'*10) for port in results[host].get(): print(port, ':', ports_service[port])二 運行結(jié)果
starting 192.168.0.105...
==============================
192.168.0.105 ..........
80 : http
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python URL操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
新聞熱點
疑難解答
圖片精選