2009-07-16 111 views
0

我需要接收和解析一些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.pytrapsender.py彼此交談沒有問題,但如果我運行traplistener.py等待自己的SNMP信號,我再次無法接收任何內容。我應該注意,我必須通過sudo運行python程序才能獲得訪問套接字的權限。通過sudo運行java程序沒有效果。

所有這些讓我懷疑這兩個程序都遇到了OS X及其套接字的問題,或許他們的權限。例如,我必須更改Wireshark工作的/dev/bpf設備上的權限。另一個想法是,它與我的機器啓用了多個網絡適配器有關,包括eth0(以太網,我看到陷阱信息感謝Wireshark)和eth1(wifi)。這可能是問題嗎?如你所見,我對socket或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。但是,我的程序仍然沒有顯示接收到我知道的數據包的跡象。

回答

0

好吧,讓我的代碼工作的解決方案是運行程序java -Djava.net.preferIPv4Stack=true -jar bridge.jar並重新啓動SNMP陷阱發送器。感謝您的幫助,Brian。

0

SNMP陷阱的標準端口號爲162

是否有你指定一個不同的端口號的原因是什麼?您通常可以更改發送/接收陷阱的端口號,但顯然兩端必須達成一致。所以我想知道這是否是你的問題。

+0

我不知道,雖然我被告知SNMP數據包在某種程度上是非標準的,所以這可能是其中的一部分... – pr1001 2009-07-16 16:24:57