Python實現局域網指定端口掃描
阿新 • • 發佈:2018-04-19
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實現局域網指定端口掃描