我正在尝试从远程计算机获取 netstat 信息。现在,我的方法是:
1) 在 C# 中使用命令 netstat -a > C:\file.out 执行 RemoteProcess 2) 我将远程 C$ 共享映射到我的本地
3) 我从挂载中读取文件
我希望一次在许多系统上执行此操作,并且这种方法的性能很差。我在想更好的方法是查询 WMI,但我找不到如何从 msdn 上的类定义中提取 netstat 信息。有人有想法么?蒂亚!
我遇到了同样的问题,并通过使用以下命令行创建远程 WMI 进程来解决它:
string commandLine = "cmd.exe /C netstat.exe -ano > \"{0}\"";
我基本上只是确定了我使用的是哪种操作系统(使用 WMI),并使用 或 格式化了命令行的其余C:\users\public\output.txt
部分C:\Documents and Settings\All Users\output.txt
。然后我只需将结果读入并删除源文件。
您是否考虑过使用SNMP而不是使用 WMI ?在我看来,SNMP 是最合乎逻辑的协议。
虽然我的 SNMP 经验仅限于监控交换机和 UDP,但我将尝试为您提供一些关于从何处开始的指示。
首先,这需要 SNMP 服务在受监控的计算机上运行,并且可能需要调查使用哪些 MIB。我无法确切告诉你在哪里看,但我找到了一个已经完成的项目(虽然不是 .NET,它应该有助于参考)
通过一些调查,这个脚本应该提供足够的信息来试一试。
我注意到他的脚本中有以下 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
此链接提供有关使用 SNMP 的更多信息