我需要接收和解析一些SNMP陷阱(消息),我希望获得我在OS X机器上工作的代码的任何建议。我已经得到了一些使用net-snmp在Windows上运行的Java代码。我想要让Java代码在我的开发机器上运行,或者掀起一些Python代码来做同样的事情。如何在OS X上接收SNMP陷阱?
我能够在我的OS X机器上编译Java代码,它运行时没有任何抱怨,包括我无法绑定到套接字8255时会引发的异常。但是,它从来没有报告收到任何SNMP陷阱,这让我怀疑它是否真的能够读取套接字。下面是我收集到从结合到插座上的Java程序代码:使用Python周围
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和喜欢乱七八糟,我通过easy_install
安装libsnmp,并试图获取加工。示例程序traplistener.py
和trapsender.py
彼此交谈没有问题,但如果我运行traplistener.py
等待自己的SNMP信号,我再次无法接收任何内容。我应该注意,我必须通过sudo
运行python程序才能获得访问套接字的权限。通过sudo运行java程序没有效果。
所有这些让我怀疑这两个程序都遇到了OS X及其套接字的问题,或许他们的权限。例如,我必须更改Wireshark工作的/dev/bpf
设备上的权限。另一个想法是,它与我的机器启用了多个网络适配器有关,包括eth0(以太网,我看到陷阱信息感谢Wireshark)和eth1(wifi)。这可能是问题吗?如你所见,我对socket或SNMP知之甚少,所以任何帮助都非常感谢!
更新:使用lsof
(sudo 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。但是,我的程序仍然没有显示接收到我知道的数据包的迹象。
我不知道,虽然我被告知SNMP数据包在某种程度上是非标准的,所以这可能是其中的一部分... – pr1001 2009-07-16 16:24:57