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


12

我曾经使用过可以对计算机执行ping操作或运行端口扫描的应用程序,即使该计算机被配置为不允许它也是如此。

我目前正在尝试对WAN上的远程计算机执行ping操作,但是我已将计算机配置为不允许ping操作。我可以使用类似于ping的东西吗?

同样,这台机器位于我们湾的另一个城市。

Answers:


4

如果您使用的是XP / 2003 +(包括Vista / 2008/7),则可以使用Win32_PingStatus。运行脚本代码的计算机是唯一需要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的更多信息,请参见脚本专家的文章:

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


2
我的理解是,已将远程主机配置为不响应ICMP Echo Request数据包,而不是已禁用本地主机上的ping.exe。因此,这与运行ping.exe没什么不同,也就是说,什么也没有。
David Pashley,2009年

15

您可以远程登录到计算机上的打开的TCP端口。例如,如果机器是Web服务器,并且打开了端口80,则:

telnet ip.ad.dre.ss 80

即使在加密端口上也可以使用(尽管您将无法理解数据)

可以尝试的其他端口是:

  • https服务器为443
  • ssh 22

(在Linux计算机上的/ etc / services中有端口/服务的列表)


7

Ping是ICMP,如果阻止了ICMP,则无法ping通。

如果您接受TCP / UDP连接,您仍然可以测试TCP或UDP端口。

如果要在缺少ping,nc,telnet和其他工具的容器上运行测试,则可以使用以下技巧:

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

这将尝试通过设备的tcp / udp连接(哇,我知道),如果端口打开则回显“ open”,如果端口关闭则回显“ closed”。

在这种情况下,它将挂起一会儿,然后回显“ close”。


2
太酷了,我不得不在docker pod中使用它;-)
Amorphous

4

在远程计算机上运行SNMP代理,并使用管理器从标准MIB中读取值之一。


3

如果您没有防火墙和路由器,也就是说,如果您与要检查的主机位于同一网段,则上述大多数解决方案都将为您提供详尽的建议。

连接到哪个端口都没有关系,实际上,如果连接到不太可能运行服务的端口,则可以完成工作而不会被发现。

怎么样?

您可以使用任何喜欢的工具,但我们只能使用telnet ...

% telnet <host> 313373
Trying 10.211.55.3...
telnet: connect to address 10.211.55.3: Connection refused
telnet: Unable to connect to remote host
%

除非主机丢弃数据包,否则这应该立即发生。实际发生的是主机上的TCP / IP堆栈正在向您发送回带有RST位置1的TCP段-即终止SYN数据包。

您收到RST数据包的事实意味着在另一端确实存在一台主机,并且作为奖励-您未检测到这样做(TCP / IP没有上层应用程序可以谈论此连接) 。

但是,我可能会使用scapy之类的东西,而不是telnet,写一些寻找RST标志的东西,然后告诉您。

只是为了完成此操作,如果您尝试的IP上没有主机-它将挂起一会儿,并超时- 如果接收主机的防火墙带有降落过滤器,则将发生相同的情况。

如果涉及防火墙,那么就象其他人所建议的那样,使用诸如之类的工具nmap


3

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

Arping通过发送针对计算机的ARP数据包来工作,这非常好用,因为如果您想使用网络就不能阻止arp数据包(好,您可以在所有地方设置静态arp表:D),但是缺点是您必须位于与您的目标服务器相同的局域网。


1

机器上有可用的服务吗?一种查看机器是否存在的方法是使用telnet客户端连接到它,但是更改您需要命中的端口。

因此,可以说这台机器正在运行MS SQL,默认情况下该MS SQL在端口1433上运行。您使用以下命令

telnet machine-name-address 1433

如果Telnet连接表明计算机已启动并正在运行,并不表示计算机已正常运行,但仍在侦听该端口



1

nmap -T5 -sS -P0 ho.st.ip.addr这将在该计算机上查看可用的端口。.如果您在Windows上运行或无法访问linux计算机,建议安装cygwin。


1

完美的网络扫描仪。

谷歌。

我大量使用它。很棒的作品


1

Google的“ nmap”。我经常用这个。非常适用于验证防火墙是否也按预期运行。另外,我认为它在Matrix电影中被引用过,这使它变得更加出色。


1

您可以让计算机每分钟一次将snmp陷阱(数据包)发送到远程监视器,并设置一条规则来监控您每分钟收到的陷阱。


1
这确实是一个很好的答案,也是一个非常正确的答案。SNMP足够低,可以在Windows系统上配置。它是ICMP的唯一替代方案,实际上是网络工程师通常用于通过WAN和LAN监视路由器和系统的方式
Abhishek Dujari 2012年

1

解决此问题的简单方法是使用netcat实用程序。这种情况的唯一先决条件是应该知道至少一个在该远程计算机上打开的端口。

nc -nv ip_address端口号

上面的命令将给出结果,该结果将确定所述端口是否打开,从而确定机器的可用性


0

您可以安装简单的Web服务器并使用显示“ ONLINE”的网页。您只需在需要的任何地方都可以连接它当然,您需要一个statin ip或service linke dyndns


0

一种非常简单的方法是通过telnet到应该在服务器上打开的TCP端口,即:

telnet theServerHostname 80

尽管如果服务关闭,您将获得与主机关闭相同的结果。

使用nmap可以进行各种扫描,请在nmap的站点上了解它们,您应该成为如何测试主机是否启动的专家。这些措施包括使用icmp(ping)以外的协议,例如TCP(如telnet)和UDP。

另外,如果您想要某种能够连接到udp的功能(在这种意义上类似于telnet),请考虑使用netcat


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.