色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創作
電子發燒友網>電子資料下載>電子資料>uSNMP:微型SNMP開源

uSNMP:微型SNMP開源

2023-06-14 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

uSNMP(“micro-SNMP”)是用于開發 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 上,一個實現mib-2::system表格的 uSNMP 代理,三個極簡表格,包括 2 個數字輸入(狀態切換時發送陷阱)、2 個數字輸出和 1 個模擬輸入,大約 20kB,包括 SPI ,以太網,UDP,DNS例程。它支持Get、GetNext、Set操作,并在數字輸入切換時發送Trap 。2kB SRAM 限制了 MIB 條目的數量和網絡數據包的大小(從而限制了請求和響應的長度)。通過放棄該mib-2::system表,可以將更多的數字和模擬 I/O 引腳添加到相應的表中。在 Arduino Mega 或 ESP8266 上,可以支持更大的緩沖區和更多的 I/O 引腳,因為 SRAM 更大。

uSNMP 能做什么?

該庫包括按字典順序存儲和遍歷 MIB 樹的函數;支持回調函數獲取和設置 MIB 葉節點的值,發出 SNMPv1 Get、GetNext、Set請求;構建和處理響應;創建和解析一個 varbind 列表,發送一個Trap并處理 Endianness。

為什么使用 SNMP?

SNMP(簡單網絡管理協議)是 IT 設備中的事實標準,并在工業和建筑環境領域得到很好的支持:網絡設備、服務器和存儲、UPS、整流器、遠程保護或保護信號設備、RTU、遠程 I/ O 等等。它的管理信息庫 (MIB) 概念,在 ASN.1 符號的文本文件中定義,是它的超能力。MIB 文件的工作方式類似于數據字典或設備描述語言。它們可以輕松地將新設備載入基于 SNMP 的管理軟件,其中有許多包括開源軟件,具有地理和拓撲地圖覆蓋、儀表板、圖表、事件日志、事件操作過濾器、故障單等功能。

此設置非常適合物聯網應用程序或資產管理,其中有許多相同的站點和設備,但點數很少。相比之下,SCADA/HMI 軟件適用于具有多點的單站點,例如過程工廠或建筑物,并具有高度可視化的特征,例如 3D 和動畫。

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

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

uSNMP 如何工作?

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

“...... SNMP 消息生成的問題是......轉發(未知)TLV 長度......為這個問題選擇的解決方案是使用預測解析器解析 SNMP 請求并構建響應......我們通過 SNMP PDU 進行預測性解析,當我們到達最終 TLV 時,我們通過函數調用鏈返回并根據需要更新 TLV 的長度值。”

如何使用 uSNMP?

代理和命令行實用程序的代碼示例可用作開發 SNMPv1 代理、發出 SNMPv1 請求和處理響應以及發送陷阱的模板。用于 Windows 和 *nix的示例 uSNMP 代理程序 usnmpd.c從文件中讀取 OID 和值對,并且可以用作 SNMPv1 網關,方法是讓輪詢程序格式化并將其接收到的數據寫入此文件。另一個代理示例usnmpd.ino將 Arduino 板轉換為具有數字和模擬 I/O 的支持 SNMP 的控制器MIB 文件位于mibs目錄中。ARDUINO.MIB文件用于Arduino 軟件 (IDE) 管理板,私有企業編號 (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”的企業 OID 將被編碼為“P.38644.30”

setup() 初始化板和代理“引擎”,包括構建 MIB 樹和發送冷啟動陷阱。引腳 D2 到 D5 設計為數字輸入,D6 到 D8 是數字輸出,A0 和 A1 是模擬輸入,具體取決于目標微控制器上可用的 SRAM 數量。包含 mib-2::system 表后,帶有 ATmega328p 的 Arduino UNO 可以具有 D2、D3、D6、D7 和 A0,而 Arduino Mega 可能會超出 D5、D8 和 A1(如果愿意的話)。否則,省略系統表將釋放 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 樹是用函數構建的miblistadd(),即按照字典順序將 MIB 離開節點嫁接到它上面。如果需要,隨后設置節點的值,并附加回調函數以響應 SNMP Get 和 Set 操作。在下面的摘錄中,sysDescr分配了一個已經包含系統描述的字符串。在用 BER(基本編碼規則)編碼后用sysObjectID初始化。設置了回調以在請求獲取操作時填寫系統正常運行時間。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);

數字和模擬 I/O 引腳顯示在 SNMP 表中。為了節省內存,這些表是極簡的,僅包含索引和引腳值。需要回調函數,以便在響應 Get 或 Set 請求時及時檢索值。因此,例如,對于數字輸出 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);

代理被設計為在檢測到數字輸入中的狀態變化時發送陷阱。由于 uSNMP 代理不可重入,因此只能在主循環中構建和發送陷阱。

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 請求時遇到不匹配的社區字符串,它會發送一個身份驗證失敗陷阱。

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

試驗結果

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

pYYBAGNX_VWAA6oKAAC-xCfC_7g490.jpg
使用此 uSNMP 庫構建的命令行實用程序進行測試
?

?

poYBAGNX_VeAf9lOAAEL6Ed5aTo194.jpg
使用來自 Net-SNMP (www.net-snmp.org) 的實用程序進行測試。
?

?

?

?

?

?


評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 糙汉顶弄抽插HHHH| 超碰最新地址| 毛片大全网站| 阿力gv资源| 兔费看少妇性L交大片免费| 国产一区私人高清影院| 一本久道久久综合婷婷五月| 久久笫一福利免费导航| 边做边爱播放3免费观看| 偷窥美女3| 久久嫩草影院网站| 动漫护士被乳羞羞漫| 一道本av免费不卡播放| 年轻老师毛茸茸自由性| 国产精品麻豆a在线播放| 樱花草在线观看影院| 欧美特级特黄a大片免费| 国产免费变态视频网址网站| 97超碰射射射| 亚洲三级视频| 无码欧美XXXXX在线观看裸| 男女亲吻摸下面吃奶视频| 国产亚洲精品在浅麻豆| 超碰在线视频97| 99久久国产综合精品网成人影院| 亚洲成人中文| 忘忧草秋观看未满十八| 亚洲精品AV一二三区无码| 欧美精品久久久久久久久大尺度| 国产在线观看黄| 国产成人精品自线拍| 百性阁论坛首页| 999精品免费视频| 91麻豆精品| 中国hdxxxx医院护士| 亚洲熟妇AV乱码在线观看| 香蕉鱼视频观看在线视频下载| 日本双渗透| 色翁荡熄月月| 色丁香婷婷综合缴情综| 手机在线播放成人亚洲影院电影|