2010-05-02 49 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%可靠的。我正在使用這個請求來找出應用程序何時開始偵聽套接字,並且它幾分鐘沒有準確地告訴我。