在java中使用SNMP和/或wmi/wmic进行进程到端口的映射

发布于 2024-08-31 12:11:02 字数 961 浏览 2 评论 0原文

我正在尝试使用 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)、名称(例如 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。这是来自 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 上的安装缺乏了解,但任何帮助都会有很大的帮助。

I'm trying to use SNMP to map outgoing ports on my host computer with the application running on the computer that is responsible for that communication.

When running "netstat -ano" I get access to Protocol, Local Address (with port), Foreign Address (with port), State and PID. But I want to do this entirely without having to execute "cmd" from Java.

By using SNMP OID: .1.3.6.1.2.1.25.4 (.iso.org.dod.internet.mgmt.mib-2.host.hrSWRun)
I get access to PID (ex. 1704), Name (ex. cmd.exe), Path (ex. C:\Windows\system32) among others.
There is an SNMP OID: .1.3.6.1.2.1.6.13 (.iso.org.dod.internet.mgmt.mib-2.tcp.tcpConnTable)
that give you access to TCP connection state, local address, local port, remote address, remote port. But NO PID.

So to sum up. My question again: Is there a way to "map" these tables together? Either directly in SNMP with other OID's or in conjunction with WMI / WMIC?

UPDATE: What I want is access to tcpConnectionProcess in TcpConnectionEntry (tcpConnectionTable). This is from RFC 4022.
tcpConnectionProcess has OID: .1.3.6.1.2.1.6.19.1.8 (.iso.org.dod.internet.mgmt.mib-2.tcp.tcpConnectionTable.tcpConnectionEntry.tcpConnectionProcess)

The strange thing is that I get values from OID: .1.3.6.1.2.1.6.19.1.7 (.iso.org.dod.internet.mgmt.mib-2.tcp.tcpConnectionTable.tcpConnectionEntry.tcpConnectionState)

The main problem here is that in Windows, this table is empty. Probably my lack of knowledge with regards to installation on Windows, but any help would be a great help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゞ记忆︶ㄣ 2024-09-07 12:11:02

3 年后仍然如此:MS 不支持 tcpListenerTabletcpConnectionTable,尽管 RFC4022 是从 2005 年开始的。它返回这两个的 tcpConnTable请求,并且您需要进行设置来处理该请求,因为它与您请求的 OID 不同。

并且返回的数据并非100%可靠。我正在使用此请求来查明应用程序何时开始侦听套接字,但它在几分钟内没有准确地告诉我。

It's still true 3 years later: MS doesn't support tcpListenerTable or tcpConnectionTable, despite RFC4022 being from 2005. It returns the tcpConnTable for both these requests, and you need to be set up to handle that, as it's a different OID from the one you requested.

And the data returned isn't 100% reliable. I was using this request to find out when an application started listening on the socket, and it didn't tell me accurately for several minutes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文