![Python 循环端口扫描脚本在端口 80 上停止且无错误](https://linux22.com/image/1167897/Python%20%E5%BE%AA%E7%8E%AF%E7%AB%AF%E5%8F%A3%E6%89%AB%E6%8F%8F%E8%84%9A%E6%9C%AC%E5%9C%A8%E7%AB%AF%E5%8F%A3%2080%20%E4%B8%8A%E5%81%9C%E6%AD%A2%E4%B8%94%E6%97%A0%E9%94%99%E8%AF%AF.png)
我有一个扫描端口的 Python 脚本。我扫描了一台有 2 个开放端口(22 和 80)的主机。当我的脚本到达端口 22 时,我收到一条消息,上面写着“打开端口 + 正在运行的服务”。然后脚本继续... 当它到达端口 80 时,它就卡住了。我不知道为什么,我没有收到错误。
有人能帮我检查一下我的代码吗,因为我找不到问题所在。谢谢
for port in range(1,82):
s = socket.socket()
result = s.connect_ex((ip, port))
s.close()
if result == 0:
s = socket.socket()
s.connect((ip, port))
data = str(s.recv(1024))
s.close()
print ("Port {}: Open -- ".format(port) + (data))
else:
print ("Port {}: Closed".format(port))
答案1
当目标主机/端口未打开时,它必须等待连接超时。有时路由器或主机会快速返回拒绝连接,但默认情况下,大多数服务都配置为“隐身”且不会以任何方式做出响应。
您可以使用以下方法解决此问题设置超时Python 中套接字上的函数:
s.setTimeout(1.0)
它接受秒数,但也可以是像0.5
500ms 这样的浮点数。