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

