如何在python程序中的Socket库中在2秒后结束连接

问题描述 投票:0回答:1

我正在尝试运行该脚本。但是当我将不在网络中的 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 sockets security scripting
1个回答
0
投票

要在指定的超时时间后结束 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()
© www.soinside.com 2019 - 2024. All rights reserved.