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

Python 2.7端口扫描器显示所有端口关闭的问题求助

你的端口扫描器全显示关闭?这几个问题得先解决!

嘿,我仔细看了你的代码和问题描述,发现几个关键问题导致所有端口都被误判为关闭,咱们一步步来修正:

1. 复用同一个Socket是大坑!

你在函数外面只创建了一个s Socket对象,一旦第一次连接某个关闭的端口失败,这个Socket就会进入错误状态,之后再用它连任何端口都会直接抛出异常——相当于“一次失败,全锅端”。

正确姿势:每次扫描端口时都新建一个Socket实例,让每个端口的连接尝试都是独立的,互不干扰。

2. 没设置超时,要么卡要么错

默认的Socket连接超时时间特别长,要是目标服务器没响应,程序会僵住好久,甚至被系统强制中断。加个超时设置,既能提高扫描效率,也能避免无意义的等待。

3. 异常处理太潦草

你的代码里except:后面没写完,最好明确捕获socket.error这类网络相关的异常,别把其他无关异常也当成端口关闭来处理,不然容易误判。

修复后的完整代码

import socket

def pscan(port):
    serverIp = socket.gethostbyname('www.google.com')
    # 每次扫描都新建socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置1秒超时,避免卡壳
    s.settimeout(1)
    try:
        s.connect((serverIp, port))
        print(f"Port {port} is open")
        return True
    except socket.error:
        print(f"Port {port} is closed")
        return False
    finally:
        # 不管成功失败,都记得关闭socket释放资源
        s.close()

# 先测谷歌肯定开放的80和443端口,验证代码是否正常
for port in [80, 443, 21, 22]:
    pscan(port)

额外提醒

  • 谷歌对外只开放80(HTTP)和443(HTTPS)这类服务端口,其他大部分端口本来就是关闭的,你可以先扫这两个端口确认代码没问题。
  • 别对着公共服务器大规模扫端口,容易被防火墙拦截,甚至触发安全机制,遵守网络规范很重要哦。
  • 对了,Python2.7早就停止维护了,建议尽早转Python3,语法差异不大,但安全性和兼容性好太多啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:23