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