我需要接收和解析一些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