snmp4j程式設計之三 trap監聽
接收Trap報文資訊的類::
import java.io.IOException; import java.net.UnknownHostException; import java.util.Vector; import org.snmp4j.CommandResponder; import org.snmp4j.CommandResponderEvent; import org.snmp4j.MessageDispatcherImpl; import org.snmp4j.Snmp; import org.snmp4j.TransportMapping; import org.snmp4j.mp.MPv1; import org.snmp4j.mp.MPv2c; import org.snmp4j.mp.MPv3; import org.snmp4j.security.SecurityModels; import org.snmp4j.security.SecurityProtocols; import org.snmp4j.security.USM; import org.snmp4j.smi.Address; import org.snmp4j.smi.GenericAddress; import org.snmp4j.smi.OctetString; import org.snmp4j.smi.TcpAddress; import org.snmp4j.smi.UdpAddress; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultTcpTransportMapping; import org.snmp4j.transport.DefaultUdpTransportMapping; import org.snmp4j.util.MultiThreadedMessageDispatcher; import org.snmp4j.util.ThreadPool; /** * 本類用於監聽代理程序的Trap資訊 * * @author zhanjia * */ public class MultiThreadedTrapReceiver implements CommandResponder { private MultiThreadedMessageDispatcher dispatcher; private Snmp snmp = null; private Address listenAddress; private ThreadPool threadPool; public MultiThreadedTrapReceiver() { // BasicConfigurator.configure(); } private void init() throws UnknownHostException, IOException { threadPool = ThreadPool.create("Trap", 2); dispatcher = new MultiThreadedMessageDispatcher(threadPool, new MessageDispatcherImpl()); listenAddress = GenericAddress.parse(System.getProperty( "snmp4j.listenAddress", "udp:192.168.1.23/162")); // 本地IP與監聽埠 TransportMapping transport; // 對TCP與UDP協議進行處理 if (listenAddress instanceof UdpAddress) { transport = new DefaultUdpTransportMapping( (UdpAddress) listenAddress); } else { transport = new DefaultTcpTransportMapping( (TcpAddress) listenAddress); } snmp = new Snmp(dispatcher, transport); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1()); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c()); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3()); USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3 .createLocalEngineID()), 0); SecurityModels.getInstance().addSecurityModel(usm); snmp.listen(); } public void run() { try { init(); snmp.addCommandResponder(this); System.out.println("開始監聽Trap資訊!"); } catch (Exception ex) { ex.printStackTrace(); } } /** * 實現CommandResponder的processPdu方法, 用於處理傳入的請求、PDU等資訊 * 當接收到trap時,會自動進入這個方法 * * @param respEvnt */ public void processPdu(CommandResponderEvent respEvnt) { // 解析Response if (respEvnt != null && respEvnt.getPDU() != null) { Vector<VariableBinding> recVBs = (Vector<VariableBinding>)respEvnt.getPDU().getVariableBindings(); for (int i = 0; i < recVBs.size(); i++) { VariableBinding recVB = recVBs.elementAt(i); System.out.println(recVB.getOid() + " : " + recVB.getVariable()); } } } public static void main(String[] args) { MultiThreadedTrapReceiver multithreadedtrapreceiver = new MultiThreadedTrapReceiver(); multithreadedtrapreceiver.run(); } }
傳送Trap報文資訊的類:
import java.io.IOException; import java.util.Vector; import org.snmp4j.CommunityTarget; import org.snmp4j.PDU; import org.snmp4j.Snmp; import org.snmp4j.TransportMapping; import org.snmp4j.event.ResponseEvent; import org.snmp4j.mp.SnmpConstants; import org.snmp4j.smi.Address; import org.snmp4j.smi.GenericAddress; import org.snmp4j.smi.OID; import org.snmp4j.smi.OctetString; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultUdpTransportMapping; /** * 本類用於向管理程序傳送Trap資訊 * * @author zhanjia * */ public class SnmpUtilSendTrap { private Snmp snmp = null; private Address targetAddress = null; public void initComm() throws IOException { // 設定管理程序的IP和埠 targetAddress = GenericAddress.parse("udp:192.168.1.23/162"); TransportMapping transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); transport.listen(); } /** * 向管理程序傳送Trap報文 * * @throws IOException */ public void sendPDU() throws IOException { // 設定 target CommunityTarget target = new CommunityTarget(); target.setAddress(targetAddress); // 通訊不成功時的重試次數 target.setRetries(2); // 超時時間 target.setTimeout(1500); // snmp版本 target.setVersion(SnmpConstants.version2c); // 建立 PDU PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.1"), new OctetString("SnmpTrap"))); pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.2"), new OctetString("JavaEE"))); pdu.setType(PDU.TRAP); // 向Agent傳送PDU,並接收Response ResponseEvent respEvnt = snmp.send(pdu, target); // 解析Response if (respEvnt != null && respEvnt.getResponse() != null) { Vector<VariableBinding> recVBs = (Vector<VariableBinding>) respEvnt.getResponse().getVariableBindings(); for (int i = 0; i < recVBs.size(); i++) { VariableBinding recVB = recVBs.elementAt(i); System.out.println(recVB.getOid() + " : " + recVB.getVariable()); } } } public static void main(String[] args) { try { SnmpUtilSendTrap util = new SnmpUtilSendTrap(); util.initComm(); util.sendPDU(); } catch (IOException e) { e.printStackTrace(); } } }
1、執行MultiThreadedTrapReceiver類,提示“開始監聽Trap資訊!”並處理監聽狀態
2、執行SnmpUtilSendTrap類,執行完畢後,將會在“開始監聽Trap資訊!”後面顯示:
1.3.6.1.2.3377.10.1.1.1.1 : SnmpTrap
1.3.6.1.2.3377.10.1.1.1.2 : JavaEE
MultiThreadedTrapReceiver輸出面板中顯示以上兩行即表示測試成功!
說明:
本例只在本人電腦上測試過,作業系統為Windows
相關推薦
snmp4j程式設計之三 trap監聽
接收Trap報文資訊的類:: import java.io.IOException; import java.net.UnknownHostException; import java.util.Vector; import org.snmp4j.CommandRes
ios開發之--鍵盤的監聽
efault key nil self. transform blog mar form owa 監聽鍵盤的彈出,讓整個頁面向上移動,比較簡單,僅做記錄使用: 代碼如下: // 監聽鍵盤 [[NSNotificationCenter defaultCenter]
圖形用戶界面之添加監聽,實例化
IT main round ID end AD generated 圖片 ima package 圖形用戶界面1;import java.awt.*;//import java.awt.event.ActionEvent;//import java.awt.event.Wi
HTML編程之滾輪滑動監聽效果的實現
false eve function dom 滾輪 event als 瀏覽器 html 在前端頁面制作過程中,我們經常會發現有時候某些動作需要滾動滑輪來實現,那麽對於初學者來說可能不明白是如何實現的,對於這個問題,下面就來跟大家分析一下,如何用滾輪滑動監聽效果的實現。 源
Vue之數據監聽存在的問題
methods const name val 深度 cli and 不可 相同 Vue之數據監聽 當數據監聽的是列表時,數據發生改變,不會被監聽到。 // 用$set修改數組中的數組能夠被監聽 // app.$set(this.hobby,
Preference 三種監聽事件總結
Preference 三種監聽事件總結 今天使用到,突然有點模糊了,總結記錄下方便回顧。 對比 區別 聯絡 執行順序 onPreferenceClick
android_三種監聽事件de用法
layout: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm
Python黑客程式設計3網路資料監聽和過濾
Python黑客程式設計3網路資料監聽和過濾 課程的實驗環境如下: •作業系統:kali Linux 2.0 •程式設計工具:Wing IDE •Python版本:2.7.9 •涉及到的主要python模組:pypcap,dpkt,scapy,scapy-http 涉及到的幾個python網路抓包和
Fragment詳解之六——如何監聽fragment中的回退事件與怎樣儲存fragment狀態
前言:計劃總是趕不上變化,無論結局怎樣,只要一直跟隨自己的內心,不放棄,總有一天,你會成為那個人,加油。相關文章:經過前幾篇,大家應該對Fragment認識的已經足夠多了,有關Fragment的基礎知識在前幾篇基本就講完了,這篇給大家講兩個可能會用到的知識點。這兩點理解起來可
android之 TextWatcher的監聽
以前用過android.text.TextWatcher來監聽文字發生變化,但沒有仔細去想它,今天興致來了就發個瘋來玩玩吧! 有點擔心自己理解錯,所以還是先把英文API解釋給大家看看 1、什麼情況下使用了? When an object of a type is attac
java&android執行緒池-Executor框架之ThreadPoolExcutor&ScheduledThreadPoolExecutor淺析(多執行緒程式設計之三)
java多執行緒-概念&建立啟動&中斷&守護執行緒&優先順序&執行緒狀態(多執行緒程式設計之一)java多執行緒同步以及執行緒間通訊詳解&消費者生產者模式&死鎖&Thread.join()(多執行緒程式設計之二)
Java併發程式設計之三:執行緒掛起、恢復與終止的正確方法
出處:http://blog.csdn.NET/ns_code/article/details/17095733 掛起和恢復執行緒 Thread 的API中包含兩個被淘汰的方法,它們用於臨時掛起和重啟某個執行緒,這些方法已經被淘汰,因為它們是不安全的,不穩定的。如果
Preference 三種監聽事件說明
Android preference onPreferenceClick/onPreferenceChange/onPreferenceTreeClick 分析 3者的區別 使用方式不同 onPreferenceClick 與onPreference
Java之GUI鍵盤監聽事件KeyListener
例項:監聽鍵盤的上下左右鍵 /** * KeyListener:鍵盤監聽事件 * @author Administrator */ public class KeyListenerDemo
iOS開發之音樂播放----監聽耳機拔插
新增監聽事件: [AVAudioSession sharedInstance]; [[NSNotificationCenter defaultCenter] addObserver:s
cocos creator之事件:監聽、發射、派送
事件監聽 事件處理是在節點(cc.Node)中完成的。 對於元件,可以通過訪問節點this.node來註冊和監聽事件。 監聽事件可以通過this.node.on()方法和this.node.once()方法來註冊。 node.on(type, callback,
Android常用之返回按鍵監聽
在安卓開發中,我們經常要對按鍵進行監聽,今天跟大家分享一下最常用的按下返回退出功能的實現. 如果沒有對返回鍵設定監聽,通常按下一次返回鍵就會退出程式或退出某個介面,這樣是很不人性化的,我們可以有兩種處理方式: 按下返回鍵時彈出一個對話方塊(AlertDia
Qt之鍵盤事件監聽-實時響應大小寫Capslock按鍵
目錄 一、開篇 二、效果展示 三、實現思路 1、重寫QLlinEdit 2、全域性應用程式事件 3、windows鉤子 四、相關文章
跟我一起學.NetCore之配置變更監聽
**前言** 通常程式中配置少不了,配置的修改也避免不了,配置的熱更新為此給應用程式帶來很大的便捷,不用重啟,提高使用者體驗;但往往有時候需要對修改進行審計,也就是需要記錄,有時候也會針對配置修改的時候觸發相關操作,比如說發郵件通知,或是其他業務操作等,遇到這種情況,配置變更監聽的用處就體現出來了,接下來就
安卓專案實戰之Glide 3高手養成(三):Glide的回撥與監聽
前言 通過前面兩篇的講解,我們對於Glide的一些使用都有了基本瞭解,知道了使用Glide載入圖片只需要一行程式碼即可: Glide.with(this).load(url).into(imageView); 而在這一行程式碼的背後,Glide幫我們執行了成千上萬行的邏輯。