我有一个扫描端口的 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 这样的浮点数。