查询域上的计算机是否在线

时间:2009-07-21 19:30:56

标签: .net networking sysadmin

在我工作的地方,我们使用一种名为Dameware的软件来远程管理我们域上的计算机。通过Dameware,我们可以获得所有在线并且当前连接到域的计算机的列表。

我们正在推出不向我们提供此功能的新桌面管理软件。当我们想要连接到计算机时,我们需要知道计算机的名称。

我知道如何获取属于该域的计算机列表,但这些计算机也会返回可能联机但可能不联机的计算机。如何将当前连接的计算机列表(即,它们具有活动的网络连接)返回到域?我想要返回一个属于该域的计算机列表,然后对每个计算机执行ping操作,但我认为这样做会很慢并且完全浪费资源。

我更喜欢.NET解决方案,但VB脚本也可以。我最终可能会为此构建一个GUI,我将分发给我们的IT团队成员。

3 个答案:

答案 0 :(得分:1)

Ping Ping实际上可以工作。

我正在研究scapy库,它是一个用于创建TCP / IP数据包的python库。我曾经ping过像192.168.1.0/24这样的子网。我尝试过多种ping - ARP,ICMP,TCP.UDP。结果令人震惊 -

  • TCP和UDP ping终身使用 返回所有答案
  • ICMP也需要更少的时间,但仍然如此 我不得不等待40秒或更长时间
  • ARP ping是最好的。没花 超过2-3秒返回 回答。你可以尝试一下并告诉我 你有什么经历

您应该使用Ping class of .NET来执行此操作。

您甚至应该查看this question on Stack Overflow


用于.NET的ARP库

截至目前,我不知道.NET是否提供了ARP的抽象,但它可以通过iphlpapi.dll使用

此DLL具有名为SendARP的函数,该函数具有签名

int SendARP(int DestIP,int SrcIP,byte [] pMacAddr,ref uint PhyAddrLen);

您应该查看this page for more example并阅读iphlpapi.dll

答案 1 :(得分:0)

您是否可以在每台计算机上安装一个将心跳发送到中央数据库的监控应用程序? 然后,您可以通过在每台计算机上安装一个小应用程序从数据库查询,跟踪更多统计数据等。

这样,您可以将保持状态从监控工具保存到每台计算机的成本,保留历史记录(哪些计算机在什么时间停机等),并简化监控工具以运行快速查询在DB上而不是在每台机器上执行ping操作

另外,我遇​​到了一些根据防火墙设置无法响应ping的计算机的问题(感谢启用了防火墙的Windows XP)。

最后,关于这一点的好处是,您还可以替换您的UI以使用您想要的任何内容(C#,网页等...)。

答案 2 :(得分:0)

如何使用NetServerEnum查找所有计算机? 无论如何,我建议您不要费心找到哪台机器在线,因为在用户/应用程序尝试在该机器上运行时,这可能会改变。