1. 程式人生 > >Python實現局域網指定端口掃描

Python實現局域網指定端口掃描

Python 局域網指定端口掃描

import socket import threading # 創建接收路由列表 routers = [] # 創建互斥鎖 lock = threading.Lock() # 設置需要掃描的端口號列表 port_list = [‘3389‘, ‘2425‘,‘139‘] # 定義查詢路由函數 def search_routers(): # 獲取本地ip地址列表 local_ips = socket.gethostbyname_ex(socket.gethostname())[2] # print(local_ips) # 存放線程列表池 all_threads = [] # 循環本地網卡IP列表 for ip in local_ips: for i in range(1, 255): # 把網卡IP"."進行分割,生成每一個可用地址的列表 array = ip.split(‘.‘) # 獲取分割後的第四位數字,生成該網段所有可用IP地址 array[3] = str(i) # 把分割後的每一可用地址列表,用"."連接起來,生成新的ip new_ip = ‘.‘.join(array) # print(new_ip) # 遍歷需要掃描的端口號列表 for port in port_list: dst_port = int(port) # 循環創建線程去鏈接該地址 t = threading.Thread(target=check_ip, args=(new_ip, dst_port) ) t.start() # 把新建的線程放到線程池 all_threads.append(t) # 循環阻塞主線程,等待每一字子線程執行完,程序再退出 for t in all_threads: t.join() # 創建訪問IP列表方法 def check_ip(new_ip, port): # 創建TCP套接字,鏈接新的ip列表 scan_link = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 設置鏈接超時時間 scan_link.settimeout(2) # 鏈接地址(通過指定我們 構造的主機地址,和掃描指定端口) result = scan_link.connect_ex((new_ip, port)) # scan_link.close() # print(result) # 判斷鏈接結果 if result == 0: # 加鎖 lock.acquire() print(new_ip, ‘\t\t端口號%s開放‘ % port) routers.append((new_ip, port)) # 釋放鎖 lock.release() # print(routers) print("正在掃描..., 請稍等...") # 啟動程序入口 if __name__ == ‘__main__‘: # 啟動掃描程序 search_routers()

Python實現局域網指定端口掃描