这段Python代码的功能是并发扫描指定IP地址的端口范围,测试每个端口是否可连接。具体来说:
coon_testing 函数用于测试指定IP和端口是否可连接。它通过创建socket对象并尝试连接来判断连接是否成功,并打印出成功连接的信息或不进行打印。
scan_worker 函数用于并发扫描指定IP的端口范围。它通过遍历指定的端口范围,调用 coon_testing 函数来测试每个端口是否可连接。
主程序部分从用户输入获取要扫描的IP地址、起始端口和结束端口,然后定义每次扫描的端口数量。接下来,通过创建扫描线程并启动来并发扫描端口。每次扫描结束后,更新下次扫描的起始端口。
代码和注释奉上:
import socket
import time
from threading import Thread
def coon_testing(ip, port):
"""
测试指定IP和端口是否可连接
参数:
- ip: 要测试连接的IP地址
- port: 要测试连接的端口号
返回值:
无返回值,但会打印出成功连接的信息或不进行打印
"""
socket.setdefaulttimeout(1) # 设置默认超时时间为1秒
s = socket.socket() # 创建socket对象
try:
t_start = time.time() # 记录开始尝试连接的时间
s.connect((ip, port)) # 尝试连接
t_end = time.time() # 记录成功连接的时间
flag = True
except:
flag = False
s.close() # 关闭socket连接
if flag:
connect_time = t_end - t_start # 计算连接耗时
info = f'找到 --> [IP]:{ip}, [端口]:{port}, [耗时]:{connect_time}'
print(info) # 打印连接成功的信息
def scan_worker(ip, port_start, port_end):
"""
并发扫描指定IP的端口范围,测试每个端口是否可连接
参数:
- ip: 要扫描的IP地址
- port_start: 扫描的起始端口号
- port_end: 扫描的结束端口号
返回值:
无返回值,直接调用coon_testing函数进行连接测试
"""
for port in range(port_start, port_end): # 遍历指定端口范围
coon_testing(ip, port) # 调用coon_testing函数测试连接
ip = input('请输入侦测的IP:') # 从用户输入获取要扫描的IP地址
port_start = int(input('请输入开始端口:')) # 从用户输入获取扫描的起始端口
port_end = int(input('请输入结束端口:')) # 从用户输入获取扫描的结束端口
ports_per_scan = 10 # 定义每次扫描的端口数量
# 并发扫描端口
while port_start < port_end:
port_max = port_start + ports_per_scan # 计算本次扫描的结束端口
port_max = min(port_max, port_end) # 确保不超过总结束端口
t = Thread(target=scan_worker, args=(ip, port_start, port_max)) # 创建扫描线程
t.start() # 启动线程
port_start = port_max + 1 # 更新下次扫描的起始端口
评论前必须登录!
注册