import asyncioasync def check_port(ip, port, timeout=1):"""检查目标 IP 和端口是否开放:param ip: 目标 IP 地址:param port: 目标端口:param timeout: 超时时间(秒)"""try:reader, writer = await asyncio.open_connection(ip, port, limit=1024)print(f"Host {ip} Port {port} is OPEN")writer.close()await writer.wait_closed()return ip, port, Trueexcept Exception as e:print(f"Error scanning {ip}:{port} - {e}")return ip, port, Falseif __name__ == '__main__':asyncio.run(check_port('10.200.0.10', 8080))
运行这段代码后,有2种情况【我在windows 11电脑尝试的】
1. 发送第一个SYN后没收到回复,隔时间 1s , 2s , 4s, 8s 重新发送4个SYN, 如果都失败,结束
可能原因:主机的端口被防火墙屏蔽(这个时候开不开该端口都一样)
2. 发送第一个SYN后目标主机直接返回RST, 拒绝连接,一共发送5组这样的来回,结束
可能原因:主机的端口没被防火墙屏蔽,但是上面没有运行任何服务