資料介紹
描述
uSNMP(“micro-SNMP”)是用于開發(fā) SNMPv1 代理和管理器的小型便攜式“C”庫。Arduino IDE、Windows 和 *nix 的端口包含在源代碼中,并已在 Arduino 兼容 (AVR ATmega328p) 和 Arduino Mega 與 Ethernet Shield、NodeMCU v0.9 (Expressif ESP8266)、Windows(使用 Embarcadero BCC32C C++ 編譯)上進行了測試編譯器)和 Cygwin(使用 gcc)。
uSNMP 有多小?
在帶有 Ethernet Shield 的 Arduino ATmega328p 上,一個實現(xiàn)mib-2::system表格的 uSNMP 代理,三個極簡表格,包括 2 個數(shù)字輸入(狀態(tài)切換時發(fā)送陷阱)、2 個數(shù)字輸出和 1 個模擬輸入,大約 20kB,包括 SPI ,以太網,UDP,DNS例程。它支持Get、GetNext、Set操作,并在數(shù)字輸入切換時發(fā)送Trap 。2kB SRAM 限制了 MIB 條目的數(shù)量和網絡數(shù)據包的大?。◤亩拗屏苏埱蠛晚憫拈L度)。通過放棄該mib-2::system表,可以將更多的數(shù)字和模擬 I/O 引腳添加到相應的表中。在 Arduino Mega 或 ESP8266 上,可以支持更大的緩沖區(qū)和更多的 I/O 引腳,因為 SRAM 更大。
uSNMP 能做什么?
該庫包括按字典順序存儲和遍歷 MIB 樹的函數(shù);支持回調函數(shù)獲取和設置 MIB 葉節(jié)點的值,發(fā)出 SNMPv1 Get、GetNext、Set請求;構建和處理響應;創(chuàng)建和解析一個 varbind 列表,發(fā)送一個Trap并處理 Endianness。
為什么使用 SNMP?
SNMP(簡單網絡管理協(xié)議)是 IT 設備中的事實標準,并在工業(yè)和建筑環(huán)境領域得到很好的支持:網絡設備、服務器和存儲、UPS、整流器、遠程保護或保護信號設備、RTU、遠程 I/ O 等等。它的管理信息庫 (MIB) 概念,在 ASN.1 符號的文本文件中定義,是它的超能力。MIB 文件的工作方式類似于數(shù)據字典或設備描述語言。它們可以輕松地將新設備載入基于 SNMP 的管理軟件,其中有許多包括開源軟件,具有地理和拓撲地圖覆蓋、儀表板、圖表、事件日志、事件操作過濾器、故障單等功能。
此設置非常適合物聯(lián)網應用程序或資產管理,其中有許多相同的站點和設備,但點數(shù)很少。相比之下,SCADA/HMI 軟件適用于具有多點的單站點,例如過程工廠或建筑物,并具有高度可視化的特征,例如 3D 和動畫。
那么,為什么是 SNMPv1,而不是 SNMPv2 或 v3?
SNMP 協(xié)議,盡管它的名字,實際上并不容易實現(xiàn),也不適合小型處理器,即使對于 SNMPv1 也是如此。SNMPv1 與 v2/v3 相比,您失去了什么?主要針對批量數(shù)據查詢和安全特性的操作。但是考慮一下:設備的 MIB 仍然可以通過 SNMPv1 操作完全遍歷。大多數(shù)(如果不是全部)工業(yè)協(xié)議,包括 Modbus、BACnet 和 Profinet 等占主導地位的協(xié)議,都沒有內置或安全功能較弱。這不是輕視安全,而是在情況允許的情況下提倡務實。
uSNMP 如何工作?
uSNMP 庫擴展了 M. Tim Jones (Charles River Media, 2002. ISBN 1-58450-247-9) 所著的“嵌入式系統(tǒng)的 TCP/IP 應用層協(xié)議”一書的第 8 章中介紹的嵌入式 SNMP 服務器,他非常雄辯地寫了
“...... SNMP 消息生成的問題是......轉發(fā)(未知)TLV 長度......為這個問題選擇的解決方案是使用預測解析器解析 SNMP 請求并構建響應......我們通過 SNMP PDU 進行預測性解析,當我們到達最終 TLV 時,我們通過函數(shù)調用鏈返回并根據需要更新 TLV 的長度值?!?/font>
如何使用 uSNMP?
代理和命令行實用程序的代碼示例可用作開發(fā) SNMPv1 代理、發(fā)出 SNMPv1 請求和處理響應以及發(fā)送陷阱的模板。用于 Windows 和 *nix的示例 uSNMP 代理程序 usnmpd.c從文件中讀取 OID 和值對,并且可以用作 SNMPv1 網關,方法是讓輪詢程序格式化并將其接收到的數(shù)據寫入此文件。另一個代理示例usnmpd.ino將 Arduino 板轉換為具有數(shù)字和模擬 I/O 的支持 SNMP 的控制器。MIB 文件位于mibs目錄中。ARDUINO.MIB文件用于Arduino 軟件 (IDE) 管理板,私有企業(yè)編號 (PEN) 是Armadino 的 38644。
usnmpd.ino - Arduino 的 SNMP 代理
讓我們更深入地研究一下usnmpd.ino 。對于 NodeMCU 等第 3 方硬件包,首先需要在 Arduino IDE 中添加其 Boards Manager JSON 文件的 URL。URL 指向 Arduino IDE 用來構建可用已安裝板的列表的 JSON 索引文件。這可以通過File...Preferences和 NodeMCU 等 ESP8266 板完成:
usnmpd.ino的前幾行設置了網絡連接(以太網或 WiFi)、IP 地址和代理配置。
// Agent's IP configuration. Retain these global variable names.
IPAddress hostIpAddr( 192, 168, 1, 177 ),
dnsServer( 192, 168, 1, 1 ),
hostGateway( 192, 168, 1, 1 ),
hostNetmask( 255, 255, 255, 0 );
#ifdef ARDUINO_ETHERNET
unsigned char hostMacAddr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
#else // assume ARDUINO_WIFI
char staSSID[] = "Wifi_SSID";
char staPSK[] = "Wifi_Password";
#endif
// SNMP agent configuration.
#define ENTERPRISE_OID "P.38644.30" // used as sysObjectID and in trap
#define RO_COMMUNITY "public"
#define RW_COMMUNITY "private"
#define TRAP_DST_ADDR "192.168.1.170"
uSNMP 為對象 ID 定義了三個前綴,每個有效的 OID 都需要以這些前綴開頭:
B denotes Mgmt-Mib2 - 1.3.6.1.2.1
E denotes Experimental - 1.3.6.1.3
P denotes Private-Enterprises - 1.3.6.1.4.1
因此,sysDescr.0 (1.3.6.1.2.1.1.1.0) 將被編碼為“B.1.1.0”,“1.3.6.1.4.1.38644.30”的企業(yè) OID 將被編碼為“P.38644.30”
setup() 初始化板和代理“引擎”,包括構建 MIB 樹和發(fā)送冷啟動陷阱。引腳 D2 到 D5 設計為數(shù)字輸入,D6 到 D8 是數(shù)字輸出,A0 和 A1 是模擬輸入,具體取決于目標微控制器上可用的 SRAM 數(shù)量。包含 mib-2::system 表后,帶有 ATmega328p 的 Arduino UNO 可以具有 D2、D3、D6、D7 和 A0,而 Arduino Mega 可能會超出 D5、D8 和 A1(如果愿意的話)。否則,省略系統(tǒng)表將釋放 UNO 上的空間以容納更多引腳。
initSnmpAgent(SNMP_PORT, ENTERPRISE_OID, RO_COMMUNITY, RW_COMMUNITY);
initMibTree();
trapBuild(&request, enterpriseOID, hostIpAddr, COLD_START, 0, NULL); // cold start trap
trapSend(&request, trapDstAddr, TRAP_DST_PORT, roCommunity);
MIB 樹是用函數(shù)構建的miblistadd(),即按照字典順序將 MIB 離開節(jié)點嫁接到它上面。如果需要,隨后設置節(jié)點的值,并附加回調函數(shù)以響應 SNMP Get 和 Set 操作。在下面的摘錄中,sysDescr分配了一個已經包含系統(tǒng)描述的字符串。在用 BER(基本編碼規(guī)則)編碼后用sysObjectID初始化。設置了回調以在請求獲取操作時填寫系統(tǒng)正常運行時間。EnterpriseOIDsysUpTimeget_uptime()
/* System MIB */
// sysDescr Entry
thismib = miblistadd(mibTree, "B.1.1.0", OCTET_STRING, RD_ONLY,
sysDescr, strlen(sysDescr));
// sysObjectID Entry
thismib = miblistadd(mibTree, "B.1.2.0", OBJECT_IDENTIFIER, RD_ONLY,
entOIDBer, 0); // set length to 0 first
i = str2ber(enterpriseOID, entOIDBer);
mibsetvalue(thismib, (void *) entOIDBer, (int) i); // proper length set
// sysUptime Entry
thismib = miblistadd(mibTree, "B.1.3.0", TIMETICKS, RD_ONLY, NULL, 0);
i = 0; mibsetvalue(thismib, &i, 0);
mibsetcallback(thismib, get_uptime, NULL);
數(shù)字和模擬 I/O 引腳顯示在 SNMP 表中。為了節(jié)省內存,這些表是極簡的,僅包含索引和引腳值。需要回調函數(shù),以便在響應 Get 或 Set 請求時及時檢索值。因此,例如,對于數(shù)字輸出 D6,
// Digital output #6 index
thismib = miblistadd(mibTree, "P.38644.30.2.1.1.6", INTEGER, RD_ONLY, NULL, 0);
i = 6; mibsetvalue(thismib, &i, 0);
// The value of Digital #6
thismib = miblistadd(mibTree, "P.38644.30.2.1.2.6", INTEGER, RD_WR, NULL, 0);
i = 0; mibsetvalue(thismib, &i, 0);
mibsetcallback(thismib, get_dio, set_dio);
代理被設計為在檢測到數(shù)字輸入中的狀態(tài)變化時發(fā)送陷阱。由于 uSNMP 代理不可重入,因此只能在主循環(huán)中構建和發(fā)送陷阱。
if ( x & 0x01 ) {
vblistReset(&response); dInIndex[17]='0'+y; // use response buffer to build trap
if ( lastDIN & 0x01 ) { // input pin y was 1
i = 0; // it is thus 0 now
vblistAdd(&response, dInIndex, INTEGER, &i, 0);
trapBuild(&request, enterpriseOID, hostIpAddr, ENTERPRISE_SPECIFIC, 1, &response);
}
else {
i = 1;
vblistAdd(&response, dInIndex, INTEGER, &i, 0);
trapBuild(&request, enterpriseOID, hostIpAddr, ENTERPRISE_SPECIFIC, 2, &response);
}
trapSend(&request, trapDstAddr, TRAP_DST_PORT, rwCommunity);
}
同樣,如果代理在處理 SNMP 請求時遇到不匹配的社區(qū)字符串,它會發(fā)送一個身份驗證失敗陷阱。
if ( processSNMP() == COMM_STR_MISMATCH ) {
trapBuild(&request, enterpriseOID, hostIpAddr, AUTHENTICATE_FAIL, 0, NULL);
trapSend(&request, trapDstAddr, TRAP_DST_PORT, rwCommunity);
}
試驗結果
僅此而已。uSNMP 庫具有發(fā)出 SNMP 請求和處理響應的功能;并包括用于測試 usnmpd.imo 代理的命令行示例,例如 usnmpget 和 usnmpset。另一種方法是使用 Net-SNMP 二進制文件。兩組測試如下所示:

?

?
?
?
?
?
- 微型元件測試器開源硬件
- HPDL1414微型時鐘開源分享
- 微型格斗板開源硬件
- 基于FreeRTOS+LwIP的SNMP實現(xiàn)方案V0
- TCD1304微型PCB開源設計
- 微型焊臺開源項目
- 微型電流表開源項目
- SNMP常用的一些OID詳細例表說明
- net-snmp 技術用資料 7次下載
- SNMP協(xié)議的一些基本知識 0次下載
- SNMP協(xié)議詳解
- 基于Web 的SNMP 網絡管理
- 基于SNMP的網絡監(jiān)控系統(tǒng)
- VxWorks與SNMP代理的開發(fā)
- 基于ARM的嵌入式系統(tǒng)及SNMP的設計與實現(xiàn)
- 微型導軌賦能微型工作站高效運轉 945次閱讀
- 如何設置Windows的SNMP服務 1.9k次閱讀
- 在服務器BMC Web門戶無法查看加密的SNMP共同體 1.7k次閱讀
- 前沿開源技術領域的開源大數(shù)據一一解讀 1.9k次閱讀
- 如何使用Python通過SNMP監(jiān)控網絡設備? 2k次閱讀
- 影響微型減速電機運轉的因素 1.8k次閱讀
- 處理微型電機受潮的方法 1.9k次閱讀
- 簡單網絡管理協(xié)議(SNMP)的研究與應用 4k次閱讀
- nixie微型無人機的功能介紹_nixie微型無人機多少錢 1.4w次閱讀
- snmp協(xié)議詳解 7.4k次閱讀
- snmp及編程實現(xiàn) 9.2k次閱讀
- snmp從入門到開發(fā)詳解 2.3w次閱讀
- snmp使用哪幾種操作_snmp怎么使用_snmp的使用教程 2w次閱讀
- snmp原理與實戰(zhàn)詳解 1.2w次閱讀
- 基于SNMP的網絡監(jiān)控系統(tǒng)開發(fā)平臺與架構的設計與實現(xiàn) 7.1k次閱讀
下載排行
本周
- 1矽力杰 Silergy SY7215A 同步升壓調節(jié)器 規(guī)格書 Datasheet 佰祥電子
- 1.12 MB | 5次下載 | 免費
- 2HT81696H 內置升壓的30W立體聲D類音頻功放數(shù)據手冊
- 1.21 MB | 1次下載 | 免費
- 3HTA6863 3W超低噪聲超低功耗單聲道D類音頻功率放大器數(shù)據手冊
- 0.87 MB | 次下載 | 免費
- 4南芯 Southchip SC8802C 充電控制器 規(guī)格書 Datasheet 佰祥電子
- 88.16 KB | 次下載 | 免費
- 5矽力杰 Silergy SY7065 同步升壓轉換器 規(guī)格書 Datasheet 佰祥電子
- 910.67 KB | 次下載 | 免費
- 6矽力杰 Silergy SY7066 同步升壓轉換器 規(guī)格書 Datasheet 佰祥電子
- 989.14 KB | 次下載 | 免費
- 7WD6208A產品規(guī)格書
- 631.24 KB | 次下載 | 免費
- 8NB685 26 V,12 A,低靜態(tài)電流,大電流 同步降壓變換器數(shù)據手冊
- 1.64 MB | 次下載 | 2 積分
本月
- 1EMC PCB設計總結
- 0.33 MB | 12次下載 | 免費
- 2PD取電芯片 ECP5702規(guī)格書
- 0.88 MB | 5次下載 | 免費
- 3矽力杰 Silergy SY7215A 同步升壓調節(jié)器 規(guī)格書 Datasheet 佰祥電子
- 1.12 MB | 5次下載 | 免費
- 4氮化鎵GaN FET/GaN HEMT 功率驅動電路選型表
- 0.10 MB | 3次下載 | 免費
- 5PD取電芯片,可取5/9/12/15/20V電壓ECP5702數(shù)據手冊
- 0.88 MB | 3次下載 | 免費
- 6SY50655 用于高輸入電壓應用的偽固定頻率SSR反激式穩(wěn)壓器英文資料
- 1.01 MB | 3次下載 | 免費
- 7怎么為半導體測試儀選擇精密放大器
- 0.65 MB | 2次下載 | 免費
- 8SY52341 次級側同步整流英文手冊
- 0.94 MB | 2次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233095次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191469次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183360次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81606次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73832次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論