使用 WMI 拉回远程 netstat 数据

Posted

技术标签:

【中文标题】使用 WMI 拉回远程 netstat 数据【英文标题】:Pulling back remote netstat data with WMI 【发布时间】:2011-09-06 20:39:20 【问题描述】:

我正在尝试从远程计算机获取 netstat 信息。现在,我的方法是:

1) 在 C# 中使用命令 netstat -a > C:\file.out 执行 RemoteProcess 2) 我将远程 C$ 共享映射到我的本地 3)我从挂载读取文件

我希望同时在多个系统上执行此操作,但这种方法的性能很差。我在想更好的方法是查询 WMI,但我找不到如何从 msdn 上的类定义中提取 netstat 信息。有人有想法么?蒂亚!

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,并通过使用以下命令行创建远程 WMI 进程来解决它:

string commandLine = "cmd.exe /C netstat.exe -ano > \"0\"";

我基本上只是确定了我正在使用的操作系统的风格(使用 WMI),并使用C:\users\public\output.txtC:\Documents and Settings\All Users\output.txt 格式化了命令行的其余部分。然后我只是简单地把结果读入并删除源文件。

【讨论】:

【参考方案2】:

您是否考虑过SNMP,而不是使用WMI?在我看来,SNMP 是最合乎逻辑的协议。

虽然我的 SNMP 经验仅限于监控交换机和 UDP,但我会尝试为您提供一些关于从哪里开始的指示。

首先,这需要 SNMP 服务在受监控的计算机上运行,​​并且可能需要对使用哪些 MIB 进行一些调查。我不能告诉你具体在哪里看,但我发现了一个已经完成的项目(虽然不是 .NET,它应该是有用的参考)

Link to project(script)

经过一些调查,这个脚本应该提供足够的信息来试一试。

我注意到他的脚本中有以下 OID

对于 TCP(包括完整的树以提供一些上下文):

1.3.6.1.2.1.6.13.1.1 - tcpConnState
1.3.6.1.2.1.6.13.1 - tcpConnEntry
1.3.6.1.2.1.6.13 - tcpConnTable
1.3.6.1.2.1.6 - tcp
1.3.6.1.2.1 - SNMP MIB-2
1.3.6.1.2 - IETF Management
1.3.6.1 - OID assignments from 1.3.6.1 - Internet
1.3.6 - US Department of Defense
1.3 - ISO Identified Organization
1 - ISO assigned OIDs

对于 UDP:

1.3.6.1.2.1.7.5.1.1 - udpLocalAddress
1.3.6.1.2.1.7.5.1 - udpEntry
1.3.6.1.2.1.7.5 - udpTable
1.3.6.1.2.1.7 - udp
1.3.6.1.2.1 - SNMP MIB-2
1.3.6.1.2 - IETF Management
1.3.6.1 - OID assignments from 1.3.6.1 - Internet
1.3.6 - US Department of Defense
1.3 - ISO Identified Organization
1 - ISO assigned OIDs
Top of OID tree

This link 提供有关使用 SNMP 的更多信息

【讨论】:

SNMP 是解决此问题的好方法,但不是我的问题的选择。我应该指定我也无法更改我尝试扫描的主机的配置。我也不能使用 psexec...所以这是一个棘手的问题!

以上是关于使用 WMI 拉回远程 netstat 数据的主要内容,如果未能解决你的问题,请参考以下文章

.NET 中的异步 WMI 事件处理

Asp.Net 开发实战技术

wmi远程启动exe程序

powershell 从本地和远程设备获取WMI数据

作为 Windows 服务托管时,远程 WMI 不起作用

MSSQL/WMI/PowerShell结合篇执行PowerShell远程脚本