我正在尝试运行该脚本。但是当我将不在网络中的 IP 传递给 s.connect() 函数时。它没有响应,脚本处于暂停状态,所以如果在网络中找不到 IP,我想结束对 IP 的检查。有谁知道如何继续。
`import socket
def getBanner(ip,port):
socket.setdefaulttimeout(1)
if(s.connect((ip,port))):
banner = s.recv(1024).decode()
return banner
else:
return "Nothing"
def main():
ip = "192.168.152."+str(0)
banner = getBanner(ip,21)
print(banner)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
main()`
要在指定的超时时间后结束 Python Socket 库中的连接,可以使用 settimeout() 方法在套接字对象上设置超时值。以下是您可以修改代码以在 2 秒后结束连接的方法:
import socket
def getBanner(ip, port):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(2) # Set timeout to 2 seconds
s.connect((ip, port))
banner = s.recv(1024).decode()
return banner
except socket.timeout:
return "Connection timed out"
except ConnectionRefusedError:
return "Connection refused"
except Exception as e:
return "Error: " + str(e)
finally:
s.close()
def main():
ip = "192.168.152." + str(0)
banner = getBanner(ip, 21)
print(banner)
if __name__ == "__main__":
main()