在python

时间:2018-04-12 00:07:35

标签: python sockets

我们有一个python脚本,监控软件使用它来检查TCP端口是否打开。该脚本在大多数情况下运行良好,但我们发现某些应用程序感知防火墙实际上发送初始syn / ack响应以尝试获取更多信息以确定正在使用的应用程序,然后决定是允许还是丢弃流量,无论是否规则实际上指定了应用即使连接被丢弃,这也会导致测试通过。

有没有办法在初次交换后检查连接是否仍然打开?

我知道像这样的简单脚本不会在防火墙上通过基于应用程序的规则,但在我们的用例中,相关规则不是基于应用程序的。

def port(self, target, timeout, port):
    remote_server = socket.gethostbyname(target)
    response_time = 0.0
    try:
        start_time = time.time()
        conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        conn.settimeout(float(timeout))
        conn.connect((remote_server, int(port)))
        conn.close()
        end_time = time.time()
        response_time = (end_time - start_time) * 1000
    except socket.gaierror as e:
        logging.error(e)
        raise
    except socket.timeout as e:
        logging.error(e)
        raise
    except Exception as e:
        logging.error(e)
        raise

0 个答案:

没有答案