如何在不使用 ping 的情况下确定一台机器是否在线?

如何在不使用 ping 的情况下确定一台机器是否在线?

我曾经使用过一个应用程序,它可以在机器上 ping 或运行端口扫描,即使该机器配置为不允许这样做。

我目前正在尝试 ping 我们 WAN 上的远程计算机,但我已将该计算机配置为不允许 ping。是否有类似 ping 的程序可供我使用?

再次强调,这是一台位于我们广域网另一个城市的机器。

答案1

如果你使用的是 XP/2003+(包括 Vista/2008/7),那么你可以使用Win32_Ping状态。运行脚本代码的机器是唯一需要 XP/2003+ 的系统,它的工作方式与使用 Ping.exe 一样,只是它不使用 ping.exe,所以它应该充当您的安全设置的漏洞,不允许执行 ping.exe。

strComputer = "192.168.1.1"
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_PingStatus " & _
        "Where Address = '" & strComputer & "'")
For Each objItem in colItems
    If objItem.StatusCode = 0 Then 
        WScript.Echo "Reply received."          
    End If
Next

有关如何使用 Win32_PingStatus 的更多信息,请参阅 Scripting Guy 文章:

http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0914.mspx

答案2

对容器有用的答案

ping是 ICMP,如果您阻止了 ICMP,您就无法 ping 通。

因此,如果您有一个在 tcp/udp 上运行的服务,只需向该端口发送一个包。

现在,如果您在缺少、、、、ping和其他互联网工具的容器上运行测试,请改用此技巧:nctelnetcurlwget

(echo >/dev/tcp/${host}/${port}) &>/dev/null && echo "open" || echo "closed"

这将尝试通过 bash 伪设备(哇,我知道)通过 tcp/udp 进行连接,并检查echo "open"端口是否打开或echo "closed"关闭。

在这种情况下,它会挂起一段时间,然后回显“关闭”。

答案3

你可以通过 telnet 连接到机器上开放的 tcp 端口。例如,如果机器是 Web 服务器,并且开放了 80 端口,则只需:

telnet ip.ad.dre.ss 80

即使在加密端口上这也将有效(尽管您无法理解数据)

可以尝试的其他一些端口是:

  • 443 表示 https 服务器
  • 22 用于 ssh

(有一个端口/服务列表/etc/services在 Linux 机器上)

答案4

如果你可以访问与目标计算机位于同一 LAN 上的另一台计算机,则可以使用阿尔平

Arping 通过发送针对机器的 ARP 数据包来工作,这种方法非常完美,因为如果您想使用网络,就无法阻止 arp 数据包(好吧,您可以在任何地方设置静态 arp 表:D)但缺点是您必须与 arping 目标位于同一 LAN 内。

相关内容