我们有一个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