您好,登錄后才能下訂單哦!
使用Python怎么實現(xiàn)一個端口掃描功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
import sys import socket import multiprocessing def 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: pass def 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_open if __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)建一個新進程,同時記錄其運行結果 results[host] = pool.apply_async(ports_scan, (host, ports_service)) print('starting '+host+'...') #關閉進程池,close()必須在join()之前調用 pool.close() #等待進程池中的進程全部執(zhí)行結束 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
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。