Files
python----/test/port.py
T
2025-10-20 12:32:18 +08:00

77 lines
1.9 KiB
Python

import socket
import threading
from queue import Queue
import time
# 定义要检查的IP范围和端口
IP_BASE = "192.168.10."
START_IP = 1
END_IP = 255
TARGET_PORT = 5555
# 线程数量,可根据需要调整
THREAD_COUNT = 30
def check_port(ip, port, result_queue):
"""检查指定IP的端口是否开放"""
try:
# 创建socket对象
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置超时时间为1秒
sock.settimeout(1)
# 尝试连接
result = sock.connect_ex((ip, port))
if result == 0:
result_queue.put(ip)
sock.close()
except Exception:
pass
def worker(ip_queue, result_queue):
"""工作线程,从队列中获取IP并检查端口"""
while not ip_queue.empty():
ip = ip_queue.get()
check_port(ip, TARGET_PORT, result_queue)
ip_queue.task_done()
if __name__ == "__main__":
start_time = time.time()
print(f"开始扫描 {IP_BASE}{START_IP}{IP_BASE}{END_IP}{TARGET_PORT} 端口...")
# 创建IP队列
ip_queue = Queue()
for i in range(START_IP, END_IP + 1):
ip = f"{IP_BASE}{i}"
ip_queue.put(ip)
# 创建存储开放端口IP的队列
result_queue = Queue()
# 创建并启动线程
threads = []
for _ in range(THREAD_COUNT):
thread = threading.Thread(target=worker, args=(ip_queue, result_queue))
thread.start()
threads.append(thread)
# 等待所有IP都被处理
ip_queue.join()
# 收集结果
open_ips = []
while not result_queue.empty():
open_ips.append(result_queue.get())
# 排序结果
open_ips.sort(key=lambda x: int(x.split(".")[-1]))
# 输出结果
print("\n扫描完成!")
print(f"耗时: {time.time() - start_time:.2f} 秒")
print(f"发现 {len(open_ips)} 个设备的 {TARGET_PORT} 端口开放:")
for ip in open_ips:
print(f" {ip}:{TARGET_PORT}")