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

Python socket不同扫描逻辑下同一端口开闭检测结果不一致问题

问题根本原因有三点:

1. 端口开闭判断逻辑完全写反

socket.connect_ex()的返回值规则是:返回0代表连接成功,对应端口开放;返回非0错误码代表连接失败,对应端口关闭。但代码中choice 6和choice 9两个分支的判断逻辑完全颠倒:

  • choice 6分支写的是if result == 0: print("Port Is Closed"),把实际开放的端口误判为关闭
  • choice 9分支同样写的是if result == 0: print("port ",x,"is closed "),判断逻辑完全错误

2. choice 9分支缩进错误,遍历逻辑完全失效

贴出的代码中,choice 9分支里判断端口状态的if/else语句、端口号自增的x=x+1语句,全部写在了while x<rang循环的外部:

  • 进入循环后x值始终不会被修改,会无限重复连接初始端口(默认是0端口),不会遍历你输入的端口范围
  • 最终只会输出最后一次执行的端口(也就是你输入扫描范围99时的98端口)的结果,其余端口根本不会触发判断和输出,和你提到的“仅98端口显示为关闭,其余端口均显示开放”的现象完全吻合。

3. 资源释放逻辑错误

choice 6分支中,sock.close()仅写在else分支下,只有当判断为“端口开放”(实际对应端口关闭)时才会释放socket,当result==0(实际对应端口开放)时不会主动释放资源,会造成socket泄漏,也可能干扰后续的扫描结果。


内容的提问来源于stack exchange,提问作者Adham Ashraf Elganzoury

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:27:01