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
相关产品推荐
相关产品推荐

