标题说明了一切。循环将永远用于第一个端口,而其余端口只需花费1秒。
import socket
target = "192.168.0.104"
try:
for port in range(52,85):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setdefaulttimeout(1)
result=s.connect_ex((target,port))
if result == 0:
print("Port {} is open".format(port))
else:
print("Port {} is closed".format(port))
s.close()
# break
except KeyboardInterrupt:
print ('you stopp it manually')
except socket.gaierror:
print ("Cant resolve host name")发布于 2021-12-11 13:32:35
for port in range(52,85):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setdefaulttimeout(1)
...首先创建套接字,然后调用socket.setdefaulttimeout。但来自the documentation
Socket.setdefaulttimeout(超时) 将新套接字对象的默认超时设置为秒(浮动)。当首次导入套接字模块时,缺省值为None。有关可能的值及其各自的含义,请参见settimeout()。
因此,您创建的第一个套接字不会受到默认超时的影响,因为您在创建套接字之后设置了它。所以花了那么长时间。
除此之外,用相同的值一次又一次地调用socket.setdefaulttimeout没有多大意义。由于新设置将影响所有新创建的套接字,因此在创建任何套接字之前调用一次就足够了。
socket.setdefaulttimeout(1)
for port in range(52,85):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
...https://stackoverflow.com/questions/70315352
复制相似问题