我想使用C#检查远程计算机是否已经启动(重启/重新映像后)。
现在,我能想到的是运行PING命令并检查机器是否会回复。有没有优雅的方式?
谢谢!
修改
我担心的一个问题是PING通常会响应ONCE机器启动Windows。有些服务可能尚未启动。见Anders Lindahl回答。
答案 0 :(得分:7)
考虑到PING基本上是为了完成您正在尝试做的事情而设计的(看看机器是否可用并且正在响应),我认为它已经非常优雅了。为什么复杂化?
答案 1 :(得分:1)
Ping通常足以验证计算机是否已正确重新启动,但如果您依赖计算机上的任何服务启动,则可能需要明确检查。请查看使用WMI查询它:
答案 2 :(得分:1)
通过使用NMAP命令 nmap -sS -P0 -sV -O
其中<目标>可以是单个IP,主机名或子网
-sS TCP SYN扫描(也称为半开,或隐形扫描)
-P0选项允许您关闭ICMP ping。
-sV选项启用版本检测
-O标志尝试识别远程操作系统
其他选择:
-A选项启用操作系统指纹识别和版本检测
-v使用-v两次以获得更多详细信息。
nmap -sS -P0 -A -v<目标>
答案 3 :(得分:0)
为什么你认为ping是个坏主意?我不认为你会绕过发送主机的东西,并检查它是否响应,并没有真正比ping更小的程序。通过使用ping,你不必自己实现一些东西。
答案 4 :(得分:0)
我不知道优雅,但依赖于(a)某些机器可以设置为不响应ping作为潜在的DoS攻击和(b)您对机器的访问权限,也许是PowerShell脚本可以使用。可以在Intranet上使用PowerShell来确定计算机是否已打开电源,确定各种计算机服务的状态,访问该计算机上的SQL数据库,启动/关闭应用程序服务等。再次,根据您需要执行的操作,C#可能不适合这项工作。