女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>uSNMP:微型SNMP開源

uSNMP:微型SNMP開源

2023-06-14 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

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++ 編譯)上進(jìn)行了測(cè)試編譯器)和 Cygwin(使用 gcc)。

uSNMP 有多小?

在帶有 Ethernet Shield 的 Arduino ATmega328p 上,一個(gè)實(shí)現(xiàn)mib-2::system表格的 uSNMP 代理,三個(gè)極簡表格,包括 2 個(gè)數(shù)字輸入(狀態(tài)切換時(shí)發(fā)送陷阱)、2 個(gè)數(shù)字輸出和 1 個(gè)模擬輸入,大約 20kB,包括 SPI ,以太網(wǎng),UDP,DNS例程。它支持Get、GetNext、Set操作,并在數(shù)字輸入切換時(shí)發(fā)送Trap 。2kB SRAM 限制了 MIB 條目的數(shù)量和網(wǎng)絡(luò)數(shù)據(jù)包的大小(從而限制了請(qǐng)求和響應(yīng)的長度)。通過放棄該mib-2::system表,可以將更多的數(shù)字和模擬 I/O 引腳添加到相應(yīng)的表中。在 Arduino Mega 或 ESP8266 上,可以支持更大的緩沖區(qū)和更多的 I/O 引腳,因?yàn)?SRAM 更大。

uSNMP 能做什么?

該庫包括按字典順序存儲(chǔ)和遍歷 MIB 樹的函數(shù);支持回調(diào)函數(shù)獲取和設(shè)置 MIB 葉節(jié)點(diǎn)的值,發(fā)出 SNMPv1 Get、GetNext、Set請(qǐng)求;構(gòu)建和處理響應(yīng);創(chuàng)建和解析一個(gè) varbind 列表,發(fā)送一個(gè)Trap并處理 Endianness。

為什么使用 SNMP?

SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)是 IT 設(shè)備中的事實(shí)標(biāo)準(zhǔn),并在工業(yè)和建筑環(huán)境領(lǐng)域得到很好的支持:網(wǎng)絡(luò)設(shè)備、服務(wù)器和存儲(chǔ)、UPS、整流器、遠(yuǎn)程保護(hù)或保護(hù)信號(hào)設(shè)備、RTU、遠(yuǎn)程 I/ O 等等。它的管理信息庫 (MIB) 概念,在 ASN.1 符號(hào)的文本文件中定義,是它的超能力。MIB 文件的工作方式類似于數(shù)據(jù)字典或設(shè)備描述語言。它們可以輕松地將新設(shè)備載入基于 SNMP 的管理軟件,其中有許多包括開源軟件,具有地理和拓?fù)涞貓D覆蓋、儀表板、圖表、事件日志、事件操作過濾器、故障單等功能。

此設(shè)置非常適合物聯(lián)網(wǎng)應(yīng)用程序或資產(chǎn)管理,其中有許多相同的站點(diǎn)和設(shè)備,但點(diǎn)數(shù)很少。相比之下,SCADA/HMI 軟件適用于具有多點(diǎn)的單站點(diǎn),例如過程工廠或建筑物,并具有高度可視化的特征,例如 3D 和動(dòng)畫。

那么,為什么是 SNMPv1,而不是 SNMPv2 或 v3?

SNMP 協(xié)議,盡管它的名字,實(shí)際上并不容易實(shí)現(xiàn),也不適合小型處理器,即使對(duì)于 SNMPv1 也是如此。SNMPv1 與 v2/v3 相比,您失去了什么?主要針對(duì)批量數(shù)據(jù)查詢和安全特性的操作。但是考慮一下:設(shè)備的 MIB 仍然可以通過 SNMPv1 操作完全遍歷。大多數(shù)(如果不是全部)工業(yè)協(xié)議,包括 Modbus、BACnet 和 Profinet 等占主導(dǎo)地位的協(xié)議,都沒有內(nèi)置或安全功能較弱。這不是輕視安全,而是在情況允許的情況下提倡務(wù)實(shí)。

uSNMP 如何工作?

uSNMP 庫擴(kuò)展了 M. Tim Jones (Charles River Media, 2002. ISBN 1-58450-247-9) 所著的“嵌入式系統(tǒng)的 TCP/IP 應(yīng)用層協(xié)議”一書的第 8 章中介紹的嵌入式 SNMP 服務(wù)器非常雄辯寫了

“...... SNMP 消息生成的問題是......轉(zhuǎn)發(fā)(未知)TLV 長度......為這個(gè)問題選擇的解決方案是使用預(yù)測(cè)解析器解析 SNMP 請(qǐng)求并構(gòu)建響應(yīng)......我們通過 SNMP PDU 進(jìn)行預(yù)測(cè)性解析,當(dāng)我們到達(dá)最終 TLV 時(shí),我們通過函數(shù)調(diào)用鏈返回并根據(jù)需要更新 TLV 的長度值。”

如何使用 uSNMP?

代理和命令行實(shí)用程序的代碼示例可用作開發(fā) SNMPv1 代理、發(fā)出 SNMPv1 請(qǐng)求和處理響應(yīng)以及發(fā)送陷阱的模板。用于 Windows 和 *nix的示例 uSNMP 代理程序 usnmpd.c從文件中讀取 OID 和值對(duì),并且可以用作 SNMPv1 網(wǎng)關(guān),方法是讓輪詢程序格式化并將其接收到的數(shù)據(jù)寫入此文件。另一個(gè)代理示例usnmpd.ino將 Arduino 板轉(zhuǎn)換為具有數(shù)字和模擬 I/O 的支持 SNMP 的控制器MIB 文件位于mibs目錄中。ARDUINO.MIB文件用于Arduino 軟件 (IDE) 管理板,私有企業(yè)編號(hào) (PEN) 是Armadino 的 38644。

usnmpd.ino - Arduino 的 SNMP 代理

讓我們更深入地研究一下usnmpd.ino 對(duì)于 NodeMCU 等第 3 方硬件包,首先需要在 Arduino IDE 中添加其 Boards Manager JSON 文件的 URL。URL 指向 Arduino IDE 用來構(gòu)建可用已安裝板的列表的 JSON 索引文件。這可以通過File...Preferences和 NodeMCU 等 ESP8266 板完成:

usnmpd.ino的前幾行設(shè)置了網(wǎng)絡(luò)連接(以太網(wǎng)或 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 為對(duì)象 ID 定義了三個(gè)前綴,每個(gè)有效的 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() 初始化板和代理“引擎”,包括構(gòu)建 MIB 樹和發(fā)送冷啟動(dòng)陷阱。引腳 D2 到 D5 設(shè)計(jì)為數(shù)字輸入,D6 到 D8 是數(shù)字輸出,A0 和 A1 是模擬輸入,具體取決于目標(biāo)微控制器上可用的 SRAM 數(shù)量。包含 mib-2::system 表后,帶有 ATmega328p 的 Arduino UNO 可以具有 D2、D3、D6、D7 和 A0,而 Arduino Mega 可能會(huì)超出 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ù)構(gòu)建的miblistadd(),即按照字典順序?qū)?MIB 離開節(jié)點(diǎn)嫁接到它上面。如果需要,隨后設(shè)置節(jié)點(diǎn)的值,并附加回調(diào)函數(shù)以響應(yīng) SNMP Get 和 Set 操作。在下面的摘錄中,sysDescr分配了一個(gè)已經(jīng)包含系統(tǒng)描述的字符串。在用 BER(基本編碼規(guī)則)編碼后用sysObjectID初始化。設(shè)置了回調(diào)以在請(qǐng)求獲取操作時(shí)填寫系統(tǒng)正常運(yùn)行時(shí)間。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é)省內(nèi)存,這些表是極簡的,僅包含索引和引腳值。需要回調(diào)函數(shù),以便在響應(yīng) Get 或 Set 請(qǐng)求時(shí)及時(shí)檢索值。因此,例如,對(duì)于數(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è)計(jì)為在檢測(cè)到數(shù)字輸入中的狀態(tài)變化時(shí)發(fā)送陷阱。由于 uSNMP 代理不可重入,因此只能在主循環(huán)中構(gòu)建和發(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ǐng)求時(shí)遇到不匹配的社區(qū)字符串,它會(huì)發(fā)送一個(gè)身份驗(yàn)證失敗陷阱。

if ( processSNMP() == COMM_STR_MISMATCH ) {
       trapBuild(&request, enterpriseOID, hostIpAddr, AUTHENTICATE_FAIL, 0, NULL);
       trapSend(&request, trapDstAddr, TRAP_DST_PORT, rwCommunity);
}

試驗(yàn)結(jié)果

僅此而已。uSNMP 庫具有發(fā)出 SNMP 請(qǐng)求和處理響應(yīng)的功能;并包括用于測(cè)試 usnmpd.imo 代理的命令行示例,例如 usnmpget 和 usnmpset。另一種方法是使用 Net-SNMP 二進(jìn)制文件。兩組測(cè)試如下所示:

pYYBAGNX_VWAA6oKAAC-xCfC_7g490.jpg
使用此 uSNMP 庫構(gòu)建的命令行實(shí)用程序進(jìn)行測(cè)試
?

?

poYBAGNX_VeAf9lOAAEL6Ed5aTo194.jpg
使用來自 Net-SNMP (www.net-snmp.org) 的實(shí)用程序進(jìn)行測(cè)試。
?

?

?

?

?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1蘇泊爾電磁爐線路的電路原理圖資料合集
  2. 2.02 MB   |  286次下載  |  5 積分
  3. 2長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
  4. 0.46 MB   |  87次下載  |  5 積分
  5. 3AO4803A雙P通道增強(qiáng)型場(chǎng)效應(yīng)晶體管的數(shù)據(jù)手冊(cè)
  6. 0.11 MB   |  28次下載  |  2 積分
  7. 4長虹液晶彩電LS29機(jī)芯的技術(shù)資料說明
  8. 3.42 MB   |  16次下載  |  2 積分
  9. 5AI智能眼鏡產(chǎn)業(yè)鏈分析
  10. 4.43 MB   |  14次下載  |  免費(fèi)
  11. 6TP4055 500mA線性鋰離子電池充電器中文手冊(cè)
  12. 0.75 MB   |  9次下載  |  免費(fèi)
  13. 7TP4054 400mA線性鋰離子電池充電器中文手冊(cè)
  14. 0.70 MB   |  2次下載  |  免費(fèi)
  15. 8TP4057X 500mA線性鋰離子電池充電器中文手冊(cè)
  16. 0.74 MB   |  2次下載  |  免費(fèi)

本月

  1. 1人形機(jī)器人電機(jī)驅(qū)動(dòng)和傳感報(bào)告
  2. 4.27 MB   |  475次下載  |  免費(fèi)
  3. 2蘇泊爾電磁爐線路的電路原理圖資料合集
  4. 2.02 MB   |  286次下載  |  5 積分
  5. 3長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
  6. 0.46 MB   |  87次下載  |  5 積分
  7. 4U盤一鍵制作
  8. 23.84 MB   |  41次下載  |  免費(fèi)
  9. 5AO4803A雙P通道增強(qiáng)型場(chǎng)效應(yīng)晶體管的數(shù)據(jù)手冊(cè)
  10. 0.11 MB   |  28次下載  |  2 積分
  11. 6Altium Designer元件庫
  12. 17.11 MB   |  26次下載  |  免費(fèi)
  13. 7長虹液晶彩電LS29機(jī)芯的技術(shù)資料說明
  14. 3.42 MB   |  16次下載  |  2 積分
  15. 8AI智能眼鏡產(chǎn)業(yè)鏈分析
  16. 4.43 MB   |  14次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191382次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183342次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81586次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分