我正在使用 ping 命令来了解远程机器是否打开。但问题是,如果防火墙打开,远程机器不接受 ping 命令(ICMP Packect),并且假设远程机器关闭,因为 ping 状态返回 false。有没有其他方法可以知道远程机器是否打开或不假设防火墙打开。
我正在使用 ping 命令来了解远程机器是否打开。但问题是,如果防火墙打开,远程机器不接受 ping 命令(ICMP Packect),并且假设远程机器关闭,因为 ping 状态返回 false。有没有其他方法可以知道远程机器是否打开或不假设防火墙打开。
根据防火墙配置,您可能能够使用 TCP SYN ping。
实际上,如果它正在侦听端口,您将收到一个 ACK 回复,如果不是,您将收到一个 RST。
有各种工具可以做到这一点,特别是NMAP
如果另一台计算机在同一个局域网上,它仍然应该响应 ARP 请求,即使它是阻塞的
ping
。在这种情况下,您可以尝试使用类似arping
. 有关维基百科的更多信息。在更大的网络上,我想不出一种可靠的方法来判断主机是否在没有合作的情况下打开。
如果防火墙是好的,没有办法检查这一点。防火墙的全部意义在于,如果您发送的数据包被拒绝,您根本无法获得任何有关接收服务器状态的线索:核心思想是您无法分辨情况的
1)服务器不存在,并且
2)防火墙阻止了你。
为了判断远程服务器是否打开,您必须确定服务器将响应的某个端口,并在防火墙中制作适当的漏洞。
(还没有足够的声誉发表评论,所以我将其添加为答案)
这是我通常鼓励在所有机器上允许至少一些 icmp 类型(回显请求、回显回复和超时)的原因,因为丢弃 ICMP 并没有真正隐藏机器的存在(它可能对机器背后,虽然),但主要阻碍了监控和网络调试。
如果您真的对 pingflood 攻击感到偏执,则可能会进行某种速率限制(或仅在网络的边界侧进行过滤)。
请注意,不响应回显请求并不是机器不存在的标志,这通常由最后一个路由器回复 ICMP 数据包类型 3、代码 1(主机不可达)发出信号,因此使机器真正不可见是比看起来更复杂。
至于最初的问题,其中一个 nmap 扫描通常可以完成这项工作(通常是所谓的“tcp ping”扫描)。
我这样做的方法是启动与已知开放端口的 TCP 连接。如果它是 Web 服务器,它将在端口 80(或 443)上响应。肯定的响应表明机器还活着。否定响应表示许多可能的问题之一,例如通过网络的连接、不正确的防火墙配置、服务中断或机器停机。
如果您正在设置监控并且只想知道何时关注机器,只需依靠已知开放的端口即可。至少如果它停止响应,您就会知道发生了什么事。
大多数现代防火墙也可能拦截初始的 SYN-SYN/ACK-ACK 以防止资源耗尽型攻击(即发送大量 SYN 迫使服务器在其连接表中放入一个条目,然后不再继续连接——这种类型的攻击更具攻击性,这些连接可能来自欺骗的 IP 地址)。
您可能需要打开一个连接并实际请求数据以更加确保服务器实际上已启动(当然缓存服务器和其他事情甚至可以阻止这种情况)。
它是什么类型的服务器?连接类型可以适应服务器提供的服务。例如,像 nmap ( http://nmap.org/ ) 这样的工具可以请求 http 标头。
这不是 Windows 问题吗?Windows 是唯一一个在默认情况下延迟到足以阻止 ping 的操作系统。
我真的很讨厌这个。我想知道人们仅仅因为 ping 不起作用而对网络进行故障排除浪费了多少人年。
你可以做一个ARP Ping。即使防火墙阻止了 ICMP ping 的发生,ARP Ping 基本上也会询问是否有人在使用特定的 IP。ARP 用于确保没有 IP 冲突,因此机器必须做出响应。一旦这样的工具出现了。