0

我需要接收和解析一些 SNMP 陷阱(消息),我将不胜感激有关获取我在我的 OS X 机器上工作的代码的任何建议。我得到了一些使用 net-snmp 在 Windows 上运行的 Java 代码。我想让 Java 代码在我的开发机器上运行,或者编写一些 Python 代码来做同样的事情。

我能够在我的 OS X 机器上编译 Java 代码,并且它运行时没有任何抱怨,包括如果它无法绑定到套接字 8255 时我期望抛出的任何异常。但是,它从不报告收到任何SNMP 陷阱,这让我怀疑它是否真的能够在套接字上读取。下面是我收集到的绑定到套接字的 Java 程序的代码:

DatagramChannel dgChannel1=DatagramChannel.open();
Selector mux=Selector.open();
dgChannel1.socket().bind(new InetSocketAddress(8255));
dgChannel1.configureBlocking(false);
dgChannel1.register(mux,SelectionKey.OP_READ);
while(mux.select()>0) {
    Iterator keyIt = mux.selectedKeys().iterator();
    while (keyIt.hasNext()) {
        SelectionKey key = (SelectionKey) keyIt.next();
        if (key.isReadable()) {
            /* processing */
        }
    }
}

由于我不了解 Java 并且喜欢使用 Python,因此我通过安装libsnmpeasy_install尝试使其正常工作。示例程序彼此交谈没有问题,但如果我运行traplistener.py等待自己的 SNMP 信号,我再次无法接收任何内容。我应该注意,我必须通过运行 python 程序才能获得访问套接字的权限。通过 sudo 运行 java 程序没有任何效果。trapsender.pytraplistener.pysudo

所有这一切让我怀疑这两个程序都存在 OS X 及其套接字的问题,也许是它们的权限。例如,我必须更改/dev/bpf设备上的权限才能使 Wireshark 正常工作。另一个想法是,这与我的机器启用了多个网络适配器有关,包括 eth0(以太网,由于 Wireshark,我在其中看到了陷阱消息)和 eth1(wifi)。这可能是问题吗?

如您所见,我对套接字或 SNMP 知之甚少,因此非常感谢任何帮助!

更新:使用lsofsudo lsof -i -n -P确切地说)似乎我的问题是当陷阱发送者使用 IPv4 时,java 程序仅在 IPv6 上侦听。我尝试禁用 IPv6(sudo ip6 -x)并告诉 java 使用 IPv4(java -jar bridge.jar -Djava.net.preferIPv4Stack=true),但我一直在使用 IPv6 找到我的程序。有什么想法吗?

java      16444          peter   34u  IPv6 0x12f3ad98      0t0    UDP *:8255

更新 2:好的,我想我的 java 参数顺序错误:java -Djava.net.preferIPv4Stack=true -jar bridge.jar将程序放在 IPv4 上。但是,我的程序仍然没有显示接收到我知道的数据包的迹象。

4

2 回答 2

0

SNMP 陷阱的标准端口号是 162。

您指定不同的端口号是否有原因?您通常可以更改发送/接收陷阱的端口号,但显然两端必须同意。所以我想知道这是否是你的问题。

于 2009-07-16T09:57:36.777 回答
0

Ok, the solution to get my code working was to run the program as java -Djava.net.preferIPv4Stack=true -jar bridge.jar and to power cycle the SNMP trap sender. Thanks for your help, Brian.

于 2009-07-16T18:41:53.877 回答