net-snmp中自定義snmp table的實現
每次除錯程式的時候,都需要一個真實的裝置來做agent,當agent出問題的時候往往會影響專案進度,於是想能否找到一個windows上的替代品來做測試,只要有MIB就可以測試了。經過幾個月摸索現在終於找到一個替代品,用net-snmp 的擴充套件agent方式。這裡以v5.4.2.1作介紹(注意,有些版本在windows上編譯會帶來一些問題,我沒有去細究)。
1. 要在windows上編譯,請先下載ActivePerl,我這裡用的是ActivePerl-5.10.0.1004-MSWin32-x86-287188.msi。下載,安裝之後進入net-snmp目錄下的win32子目錄,敲入build(注意可能之前要提示的敲入vcvars32.bat),然後按照提示操作即可:
這裡接受預設的安裝路徑,選項3保持不動,4也保持不動,把5,6選項值為enable,按數字5,6即可,然後按F鍵,程式開始編譯。
2。編譯完之後,進入c:/usr/bin目錄,把你需要用來測試的的MIB檔案放入share/snmp/mibs目錄下,假設測試mib為DAP-2590.mib,我們要測試裡面的lanIfSettingTable節點。定義如下:
DAP-2590-v111 DEFINITIONS ::= BEGIN
IMPORTS
private, IpAddress, TimeTicks FROM RFC1155-SMI
ifIndex FROM RFC1213-MIB
OBJECT-TYPE FROM RFC-1212
-- TruthValue FROM SNMPv2-TC
MacAddress FROM SNMPv2-TC
NOTIFICATION-TYPE FROM SNMPv2-SMI;
DisplayString ::= OCTET STRING
-- This data type is used to model textual information taken
-- from the NVT ASCII character set. By convention, objects
-- with this syntax are declared as having
--
-- SIZE(0..255)
enterprises OBJECT IDENTIFIER ::= { private 1 }
dlink OBJECT IDENTIFIER ::= { enterprises 171 }
dlink-products OBJECT IDENTIFIER ::= { 10 }
dlink-dwlfamily OBJECT IDENTIFIER ::= { dlink-products 37 }
-- dwlfamily means D-Link wireless family
dap2590 OBJECT IDENTIFIER ::= { dlink-dwlfamily 36 }
interface OBJECT IDENTIFIER ::= { dap2590 2 }
lan OBJECT IDENTIFIER ::= { interface 1 }
lanIfSetting OBJECT IDENTIFIER ::= { lan 1 }
lanIfSettingTable OBJECT-TYPE
SYNTAX SEQUENCE OF LanIfSettingEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
""
::= { lanIfSetting 1 }
lanIfSettingEntry OBJECT-TYPE
SYNTAX LanIfSettingEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
""
INDEX {ifIndex}
::= { lanIfSettingTable 1 }
LanIfSettingEntry
::= SEQUENCE
{
lanIfGetIpAddressFrom INTEGER,
lanIfIpAddress IpAddress,
lanIfSubnetMask IpAddress,
lanIfDefaultGateway IpAddress,
lanIfMacAddress MacAddress
}
lanIfGetIpAddressFrom OBJECT-TYPE
SYNTAX INTEGER {static(1), dynamic(2)}
ACCESS read-write
STATUS mandatory
DESCRIPTION
""
::= { lanIfSettingEntry 1 }
lanIfIpAddress OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-write
STATUS mandatory
DESCRIPTION
""
::= { lanIfSettingEntry 2 }
lanIfSubnetMask OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-write
STATUS mandatory
DESCRIPTION
""
::= { lanIfSettingEntry 3 }
lanIfDefaultGateway OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-write
STATUS mandatory
DESCRIPTION
""
::= { lanIfSettingEntry 4 }
lanIfMacAddress OBJECT-TYPE
SYNTAX MacAddress
ACCESS read-only
STATUS mandatory
DESCRIPTION
""
::= { lanIfSettingEntry 5 }
開啟share/snmp下的snmp.conf檔案加入:
mibs +DAP-2590-v111
注意+後面跟的是MIB檔案定義的module名稱,而不是mib檔名。
然後敲入:
Snmptranslate -On -Tp DAP-2590-v111::lanIfSettingTalbe
注意,引數後面鍵入的module名稱要區分大小寫的。在mib2c中可以省去module名稱DAP-2590-v111
mib2c -c mib2c-create-dateset.conf lanIfSettingTable
將產生lanIfSettingTable.c,lanIfSettingTable.h,修改lanIfSettingTable.c
void
initialize_table_lanIfSettingTable(void)
{
static oid lanIfSettingTable_oid[] = {1,3,6,1,4,1,171,10,37,36,2,1,1,1};
size_t lanIfSettingTable_oid_len = OID_LENGTH(lanIfSettingTable_oid);
netsnmp_table_data_set *table_set;
/* create the table structure itself */
table_set = netsnmp_create_table_data_set("lanIfSettingTable");
/* comment this out or delete if you don't support creation of new rows */
table_set->allow_creation = 1;
/***************************************************
* Adding indexes
*/
DEBUGMSGTL(("initialize_table_lanIfSettingTable",
"adding indexes to table lanIfSettingTable/n"));
netsnmp_table_set_add_indexes(table_set,
ASN_INTEGER, /* index: ifIndex */
0);
DEBUGMSGTL(("initialize_table_lanIfSettingTable",
"adding column types to table lanIfSettingTable/n"));
netsnmp_table_set_multi_add_default_row(table_set,
COLUMN_LANIFGETIPADDRESSFROM, ASN_INTEGER, 1,
NULL, 0,
COLUMN_LANIFIPADDRESS, ASN_IPADDRESS, 1,
NULL, 0,
COLUMN_LANIFSUBNETMASK, ASN_IPADDRESS, 1,
NULL, 0,
COLUMN_LANIFDEFAULTGATEWAY, ASN_IPADDRESS, 1,
NULL, 0,
COLUMN_LANIFMACADDRESS, ASN_OCTET_STR, 0,
NULL, 0,
0);
/* registering the table with the master agent */
/* note: if you don't need a subhandler to deal with any aspects
of the request, change lanIfSettingTable_handler to "NULL" */
netsnmp_register_table_data_set(netsnmp_create_handler_registration("lanIfSettingTable", NULL,
lanIfSettingTable_oid,
lanIfSettingTable_oid_len,
HANDLER_CAN_RWRITE),
table_set, NULL);
/*
* Finally, this actually allows the "add_row" token it the
* * snmpd.conf file to add rows to this table.
* * Example snmpd.conf line:
* * add_row netSnmpIETFWGTable eos "Glenn Waters" "Dale Francisco"
*/
netsnmp_register_auto_data_table(table_set, NULL);//注意新增上這一句,它是從snmpd.conf中讀取table資訊。snmpd.conf檔案在哪裡?就在剛剛提到的snmp.conf同層目錄下,沒有自己可建立一個,文字格式。在該檔案中加入:
add_row lanIfSettingTable 1 1 192.168.0.20 255.255.255.0 192.168.0.1 0x001122ff4455
add_row lanIfSettingTable 2 2 192.168.0.21 255.255.255.0 192.168.0.1 0x001122ff4456
這樣就有兩行資料了,
}
同時在snmpd.conf中加入:
# This section defines who is allowed to talk to your running
# snmp agent.
# rocommunity: a SNMPv1/SNMPv2c read-only access community name
# arguments: community [default|hostname|network/bits] [oid]
rocommunity public
# rwcommunity: a SNMPv1/SNMPv2c read-write access community name
# arguments: community [default|hostname|network/bits] [oid]
rwcommunity private
設定v2c,v1的community string.
最後按照net-snmp手冊新增lanIfSettingTable.c,lanIfSettingTable.h,之後用vc6分別開啟netsnmpmibs,snmpd
然後將產生的snmpd.exe替換掉c:/usr/bin目錄下同名檔案即可,執行:
snmpd -d
snmptable -v2c -c public localhost lanIfSettingTable
成功!
相關推薦
net-snmp中自定義snmp table的實現
每次除錯程式的時候,都需要一個真實的裝置來做agent,當agent出問題的時候往往會影響專案進度,於是想能否找到一個windows上的替代品來做測試,只要有MIB就可以測試了。經過幾個月摸索現在終於找到一個替代品,用net-snmp 的擴充套件agent方式。這裡以v5.
c#中自定義集合的實現
功能:集合,包含新增,刪除,計算交集,並集,補集,是否為子集 using System; using System.Collections; using System.Collections.Generic; public class CSet { private
Android中自定義drawable資源實現佈局的圓角邊框效果
佈局的圓角邊框效果圖如下所示: 如上圖紅色標註的部分就是一個圓角邊框效果的自定義搜尋框。 實現起來很簡單,讓佈局(Relativelayout或者LinearLayout)的background屬性引用自定義的drawable資源即可。 andro
iOS中自定義delegate的實現
在iOS開發中經常會用到delegate,無論是檢視、控制元件,還是不同頁面之間傳值等等。 通常,我們需要自定義delegate實現,以下簡單介紹自定義delegate的步驟。 1.定義delegate的protocol檔案
Source Insight 中自定義命令的實現
我們開發過程中需要頻繁的開啟 ref_list.txt,可以通過 Source Insight 中的定製命令功能很方便的實現相應的命令和快捷鍵: 把要執行的工具檔案放到一個目錄下,比如:E:/tools 選單:Options à Custom Commands: (1
Spring Boot中自定義註解+AOP實現主備庫切換
摘要: 本篇文章的場景是做排程中心和監控中心時的需求,後端使用TDDL實現分表分庫,需求:實現關鍵業務的查詢監控,當用Mybatis查詢資料時需要從主庫切換到備庫或者直接連到備庫上查詢,從而減小主庫的壓力,在本篇文章中主要記錄在Spring Boot中通過自定義註解結合AOP實現直接連線備庫查詢。 一.通過A
1 .net中自定義事件的步驟
sender soc size etc utf nbsp 並且 ram void 1 申明一個自定義的類並且繼承事件的基類 public class ClientSocketModelConnectedEvent:EventArgs { priv
在.net桌面程式中自定義滑鼠游標
原文: 在.net桌面程式中自定義滑鼠游標 有的時候,一個自定義的滑鼠游標能給你的程式增色不少。本文這裡介紹一下如何在.net桌面程式中自定義滑鼠游標。由於.net的桌面程式分為WinForm和WPF兩種,這裡分別介紹一下。 WinForm程式 對於WinForm程式,可以通過修改Control.Cu
在.net桌面程序中自定義鼠標光標
.com info mco 分享圖片 rap orm mask ali asp 原文:在.net桌面程序中自定義鼠標光標有的時候,一個自定義的鼠標光標能給你的程序增色不少。本文這裏介紹一下如何在.net桌面程序中自定義鼠標光標。由於.net的桌面程序分為WinForm和WP
用React中的自定義元件模擬實現Vue-router中tag功能
我們在使用react-router-dom時,跳轉連結的<List>會轉換成<a>標籤。由於<a>標籤會破壞我們的佈局,所以今天我用React中的自定義元件實現一個類似Vue中路由跳轉中tag的功能,保留我們本來的標籤。 本篇文章涉及到的知識點包括:高階元件wit
Django中自定義實現restful
什麼是restful api 可以總結為一句話:REST是所有Web應用都應該遵守的架構設計指導原則。 Representational State Transfer,翻譯是”表現層狀態轉化”。 面向資源是REST最明顯的特徵,對於同一個資源的一組不同的操作。REST要求,必須通過統一的介面來對資源
獲取實現了某介面的所有類,並返回該類中自定義的方法的方法名
準備階段: 定義介面和實現介面的類。 interface IMyInterface { void Write(); } /// <summary> /// 實現類1 /// </summary>
在html中展示自己設計的字型(使用自定義字型庫實現資料加密)
在iconfont這麼發達的年代,作為前端設計工程師使用font awesome 是十分頻繁的,而“png圖”樣式圖示現在已經應用的比較少了,追溯其原因還是瀏覽器核心的渲染速度提升和字型庫多瀏覽器(包括手機)的支援,向量字型不會出現模糊的情況等等。從最早html4時代把圖示做
.Net中自定義類作為Dictionary的key詳解
在定義資料結構時,Dictionary提供了快速查詢資料的功能,另外Dictionary< TKey, TValue >屬於key-value鍵值對資料結構,提供了泛型的靈活性,是資料結構的一個利器,但是目前擁有的string,int,bool
Asp.net MVC Preview 4 中自定義Jquery的HtmlHelper擴充套件
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; us
彈跳載入中自定義簡單控制元件實現
package com.loaderman.customviewdemo; import android.animation.Animator; import android.animation.ValueAnimator; import android.content.Context; i
Swift中enum自定義型別的實現
在Swift中列舉型別非常強大,內建的實現可以大大減少我們手敲的程式碼量.下面碰巧就有這麼一個需求:Person類裡面有一個type屬性,其值包含2個內容,一個是name,型別為String,另一個是logo,型別也為字串,不過表現為繪文字emoji. 因為結
android中自定義畫布Canvas的實現
一、要求:1.畫布繪製控制元件的方法,控制元件應該是一個可以自定義的;2.畫布是可以縮放,且提供一個縮放的方法供外使用;3.控制元件之間連線的方法;4.畫布縮放之後手勢滑動的識別實現; 二、在github裡面種找到了一個類似度挺高的開源專案: github中的第三方的開源專
Angular2中自定義元件實現雙向繫結
在Angular2中的資料流動是單向的,我們常見的雙向繫結的例子如下:<input [(ngModel)]="value"/>等價於<input [ngModel]="value" (ngModelChange)="valueChange($even
如何在C#.net中自定義和使用特性
Attribute的基本概念 經常有周邊人問,Attribute是什麼?它有什麼用?好像沒有這個東東程式也能執行。實際上在.Net中,Attribute是一個非常重要的組成部分,本文整理相關資料,提供給大家參考。 首先,我們肯定Attribute是一個類,下面是msd