如何在LAN上的所有主机上查找正在运行的程序的所有实例?

时间:2010-07-06 20:42:01

标签: c# .net

出于实际目的,SqlDataSourceEnumerator所做的是查找LAN上各种PC上运行的所有SQL Server实例。

是否有找到任意应用程序的运行实例的等价物?

编辑:好的,所以这只能起作用,因为这些应用程序具有预先定义的合作方法。是否有一种直接的方法来确定某个给定文件(例如exe)是否存在于LAN上的某台机器上,即使应用程序本身当时没有运行?理解必须考虑权限。

3 个答案:

答案 0 :(得分:0)

不同之处在于SqlDataSourceEnumerator在LAN上找到“它可以看到”的所有实例。如果服务器进程配置为不响应该请求,则不会看到它。

沿着同一条线,您可以扫描任何有某种方式使其存在远程知道的应用程序。最简单的是,应用程序将监听并响应连接。例如,应用程序可以绑定到TCP端口并侦听任何请求并发回一个响应,表明它已存活并正在运行,并且可以扫描网络上的主机以获取这些回复。

然而,对于“任意应用程序”,大多数应用程序没有这种网络发现机制。如果您控制任意应用程序,那么您可以在其中构建该功能。但如果你不这样做,那么你需要某种方法在任何给定的主机上寻找该应用程序,这意味着它需要某种网络交互。

答案 1 :(得分:0)

它在整个局域网(子网掩码)上广播UDP数据包(端口1434)的SQL枚举。在各种主机上运行的SQL Browser Agent服务侦听此数据包,并使用本地实例列表进行响应。因此,为了实现枚举,许多鸭子已经为你准备好了:

  • 有一个众所周知的SQL isntance发现协议,UDP 1434广播和响应
  • 有一个服务正在侦听此广播,由SQL Server安装程序
  • 安装
  • 有一个客户端库来实现您利用的广播请求格式和响应解析

对于任意行为相同的应用程序,所述应用程序必须实现这些缺失的部分。在所有实际方法中,发现在子网段中的任意主机上运行的任意进程基本上是不可能的。

答案 2 :(得分:0)

不,没有。

适用于SQL服务器的原因是SQL服务器具有侦听器,该侦听器在网络上侦听“发现”请求。然后,应用程序可以在网络上发送广播消息,并侦听对该请求的响应,以发现SQL服务器实例。

我想你可以编写一个程序来执行此操作 - 它可以监听发现请求,使用一些Windows API函数来枚举在该计算机上运行的进程,并在请求的程序运行时做出响应。