You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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, 其他端口...]
  • 修复代码中的语法错误
    原代码if result ==0:下方的print语句缺少缩进,会导致运行报错,已在上面的代码中修正。另外KeyboardInterrupt分支中缺少print语句,无法输出退出提示,也已修正。

  • 验证步骤

    1. 用netstat -an或ss -tuln命令确认本地80/443端口是否真的处于监听状态。
    2. 扫描本地主机时使用127.0.0.1作为目标IP,避免网络配置问题。

内容的提问来源于stack exchange,提问作者Edward Pan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:05:42