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

为何Python端口扫描代码中serv.bind遇开放端口会抛出异常?

为什么开放端口执行bind会抛出异常?

先把核心逻辑掰明白:

  • 端口开放的本质是:这个端口已经被主机上的其他进程(比如Web服务、数据库服务)绑定并占用了。
  • socket.bind()的作用是:让你当前创建的socket独占指定的本地端口,用来监听连接或传输数据。

所以当你尝试绑定一个已经开放的端口时,操作系统会直接拒绝——因为一个端口同一时间只能被一个进程的socket绑定。这时候bind就会抛出异常,触发代码里的except块,所以这段代码才会把绑定失败的端口判定为“开放端口”。

反过来,如果端口是关闭状态(没有任何进程占用),你的bind操作就能成功,不会进入except块,也就不会打印这个端口。

另外提个小优化:原代码里如果try块内创建socket时出问题,后面的serv.close()会报错,改成用finally块处理关闭更稳妥:

import socket

host = socket.gethostname()

for port in range(65535):  
    serv = None
    try:  
        serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        serv.bind((host, port))
    except: 
        print('[OPEN] Port open :', port)
    finally:
        if serv:
            serv.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:19:56