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

标签 java wmi snmp

我正在尝试使用 SNMP 将我的主机上的传出端口映射到负责该通信的计算机上运行的应用程序。

运行“netstat -ano”时,我可以访问协议(protocol)、本地地址(带端口)、外部地址(带端口)、状态和 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 上安装的知识,但任何帮助都会有很大帮助。

最佳答案

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

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

关于java - 在java中使用SNMP和/或wmi/wmic进行进程到端口的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2753711/

相关文章:

java - 使用 Spring boot 加载 keras 模型

python - 如何在 python 中访问 wmi?

performance - 如何使用 Delphi 创建 Windows 性能计数器?

java - 无法使用 Auth 和 Priv 发送 snmp v3 陷阱

aes - net-snmp 是否支持 AES-192 和 AES-256 加密?

java - 第二次点击 Android 主屏幕小部件不起作用

java - 在 Jax-Ws 中使用 @Autowire 和 Spring 容器

c# - 使用 Wmi win32_Process 的远程进程执行 - 获取进程的标准输出

c - SnmpRegister() 在 WinSNMP 中失败

java - 如何打印出正确的输出