我正在尝试使用SNMP将主机上的传出端口映射到负责该通信的计算机上运行的应用程序。
运行“netstat -ano”时,我可以访问协议,本地地址(带端口),外部地址(带端口),状态和PID。但我想完全做到这一点,而不必从Java执行“cmd”。
使用SNMP OID:.1.3.6.1.2.1.25.4(.iso.org.dod.internet.mgmt.mib-2.host.hrSWRun) 我可以访问PID(例如1704),Name(例如cmd.exe),Path(例如C:\ Windows \ system32)等。 有一个SNMP OID:.1.3.6.1.2.1.6.13(.iso.org.dod.internet.mgmt.mib-2.tcp.tcpConnTable) 这使您可以访问TCP连接状态,本地地址,本地端口,远程地址,远程端口。但没有PID。
总结一下。我的问题是:有没有办法将这些表“映射”在一起?是直接在SNMP中与其他OID一起使用还是与WMI / WMIC结合使用?
更新:我想要的是访问TcpConnectionEntry(tcpConnectionTable)中的tcpConnectionProcess。这来自RFC 4022。 tcpConnectionProcess有OID:.1.3.6.1.2.1.6.19.1.8(.iso.org.dod.internet.mgmt.mib-2.tcp.tcpConnectionTable.tcpConnectionEntry.tcpConnectionProcess)
奇怪的是我从OID获取值:.1.3.6.1.2.1.6.19.1.7(.iso.org.dod.internet.mgmt.mib-2.tcp.tcpConnectionTable.tcpConnectionEntry.tcpConnectionState)
这里的主要问题是在Windows中,此表为空。可能是我在Windows上安装方面缺乏知识,但任何帮助都会有很大的帮助。
答案 0 :(得分:0)
3年后仍然如此:尽管RFC4022来自2005年,但MS不支持tcpListenerTable
或tcpConnectionTable,
。它会为这两个请求返回tcpConnTable
,您需要设置处理它,因为它与您请求的OID不同。
返回的数据不是100%可靠。我正在使用此请求来查找应用程序何时开始在套接字上进行侦听,并且几分钟内没有准确地告诉我。