2010-05-02 162 views
3

我试图使用SNMP来映射我的主机上的传出端口,并在负责该通信的计算机上运行应用程序。在java中使用SNMP和/或wmi/wmic进行端口映射

运行“netstat -ano”时,我可以访问Protocol,Local Address(带端口),Foreign Address(带端口),State和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),路径(例如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。这是从4022 RFC 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

它仍然是真实的在3年后:MS不支持tcpListenerTabletcpConnectionTable,尽管RFC4022从2005年开始成为它返回tcpConnTable为这两个请求,你需要设置来处理,因为它是一个不同的OID从你请求的那个。

而且返回的数据不是100%可靠的。我正在使用这个请求来找出应用程序何时开始侦听套接字,并且它几分钟没有准确地告诉我。