Python端口扫描器无法检测到开放端口问题求助
端口扫描器无法检测到开放端口的问题解决
我跟着Python教程写了个端口扫描器,程序能正常运行,但本该开放的端口扫不出来。我开着浏览器,80端口肯定是开放的,但扫描本地网络时没检测到;试了扫443端口,同样识别不出这个HTTPS端口。
原代码(注释已翻译为中文)
import sys # 允许我们传入命令行参数等 import socket # Socket及Socket API用于在网络间发送消息,提供进程间通信(IPC)的方式 from datetime import datetime # 定义目标主机 if len(sys.argv) == 2: target = socket.gethostbyname(sys.argv[1]) # 将主机名转换为IPv4地址 else: print("参数数量错误。") print("语法:python3 scanner.py <ip>") sys.exit() # 添加美观的横幅 print("-" * 50) print("正在扫描目标:" + target) print("开始时间:" + str(datetime.now())) print("-" * 50) try: # 原代码仅扫描50-84端口,未包含80、443 for port in range(50, 85): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket.setdefaulttimeout(1) # 设置超时时间(浮点数) result = s.connect_ex((target, port)) # 返回错误状态码,0表示连接成功 print(f"正在检查端口 {port}") if result == 0: print(f"端口 {port} 已开放") s.close() except KeyboardInterrupt: print("\n程序退出") sys.exit() except socket.gaierror: print("无法解析主机名") sys.exit() except socket.error: print("无法连接到服务器") sys.exit()
问题原因与解决方法
核心问题:扫描范围未覆盖目标端口
原代码中range(50, 85)仅扫描50到84的端口,80、443不在此区间内,所以无法检测到。修改扫描范围即可,比如:- 扫描1-1000端口:
range(1, 1001) - 单独扫描指定端口:
for port in [80, 443, 其他端口...]
- 扫描1-1000端口:
修复代码中的语法错误
原代码if result ==0:下方的print语句缺少缩进,会导致运行报错,已在上面的代码中修正。另外KeyboardInterrupt分支中缺少print语句,无法输出退出提示,也已修正。验证步骤
- 用
netstat -an或ss -tuln命令确认本地80/443端口是否真的处于监听状态。 - 扫描本地主机时使用
127.0.0.1作为目标IP,避免网络配置问题。
- 用
内容的提问来源于stack exchange,提问作者Edward Pan
相关产品推荐
相关产品推荐

