Ubuntu 編譯 net-snmp

一、前言

目前最有影響的網絡管理協議是 SNMP 和 CMIS/CMIP

在「網絡管理站-網管代理」的模型中,如果各個廠商提供的網絡管理站和網管代理之間的通信方式各不相同,將會大大影響網絡管理系統的通用性,影響不同廠商設備間的互連,因此需要制定一個網絡管理站和網管代理之間通信的標準。

網絡管理協議就是用於網絡管理站和網管代理之間傳遞信息,並能完成信息交換安全控制的通信規則。

網絡管理站通過網絡管理協議從網管代理那裡獲取被管設備的管理信息或向網管代理髮送命令;網管代理也可以通過網絡管理協議主動向管理站報告緊急信息。

目前最有影響的網絡管理協議是SNMPCMIS/CMIP。它們代表了目前兩大網絡管理解決方案。

其中 SNMP 流傳最廣,應用最多,獲得的支持也最廣泛,已經成為事實上的工業標準。

原文網址:https://kknews.cc/news/zkyaz5a.html


SNMP 與 CMIP/CMIS 的比較

SNMP 採用無連接,不保證可靠的 UDP 傳輸服務,而 CMIP 採用 OSI/RM 鐘面向連接可靠的傳輸服務,SNMP 是個簡單、低成本和容易實現的解決方案,他的原則是:對被管理的系統帶來的影響要最小。
CMIP 是一個資源耗費多的管理框架,管理功能強,但耗費時間多,相應軟體在管理和被管對象上運行的額外開銷大。

SNMP 的主要缺點是:

  • 不能有效地傳送大塊數據
  • 不能將網路管理的功能分散化
  • 安全性不夠好(後面衍伸 V2、V3)

PDU 協議數據單元

在電信領域,協議數據單元(英語:Protocol Data Unit,縮寫為 PDU)有以下幾層意義:

  1. 網絡的對等實體傳送的信息單元,包括了控制信息,地址信息,或者數據。
  2. 在分層協議系統里,在指定的協議層上傳送的數據單元,包含了該層的協議控制信息和用戶信息。

在 OSI 模型系統里,PDU 和最底下四層相關。

  • 物理層(一層)PDU 指數據位(Bit)。
  • 數據鏈路層(二層)PDU 指數據幀(Frame)。
  • 網絡層(三層)PDU 指數據包(Datagram)。
  • 傳輸層(四層)PDU 指數據段(Segment)。
  • 應用層(五層)PDU 指數據段(Packet)。

原文網址:https://zh.wikipedia.org/wiki/协议数据单元

原文網址:https://en.wikipedia.org/wiki/Protocol_data_unit


二、SNMP 介紹

SNMP 中定義了五種消息類型:Get-Request、Get-Response、Get-Next-Request、Set-Request 和 Trap。

SNMP 五種消息類型

(1)Get-Request 、Get-Next-Request 與 Get-Response

SNMP 管理站用 Get-Request 消息從擁有 SNMP 代理的網絡設備中檢索信息,而 SNMP 代理則用 Get-Response 消息響應。Get-Next- Request 用於和 Get-Request 組合起來查詢特定的表對象中的列元素。

(2)Set-Request

SNMP 管理站用 Set-Request 可以對網絡設備進行遠程配置(包括設備名、設備屬性、刪除設備或使某一個設備屬性有效/無效等)。

(3)Trap

SNMP 代理使用 Trap 向 SNMP 管理站發送非請求消息,一般用於描述某一事件的發生,如接口 UP/DOWN,IP 位址更改等。

原文網址:https://kknews.cc/zh-tw/entertainment/p4vv2mp.html


Extend SNMP – Run bash scripts via SNMP

1. Edit snmpd.conf

$ vim /etc/snmp.conf

# Extend SNMP
extend script1 /etc/snmp/scripts/script1.sh
extend script2 /etc/snmp/scripts/script2.sh

2. Restart SNMPD Service

$ sudo service snmpd restart
 Stopping snmpd: [ OK ]
 Starting snmpd: [ OK ]

原文網址:https://geekpeek.net/extend-snmp-run-bash-scripts-via-snmp/


net-snmp 指令

1.snmpwalk

執行一系列 snmpgetnext 指令的集合。

snmpwalk的用法
snmpwalk -v 1或2(代表SNMP版本) -c SNMP讀密碼 IP地址 OID(對象標示符)

(1) -v: 指定snmp的版本, 1或者2;
(2) -c:    指定連接設備SNMP讀密碼;
(3) IP:    指定要walk的設備的IP地址;
(4) Oid:代表要獲取設備的指標oid;

用法舉例:

例如獲取cisco設備192.168.17.191的接口類型

snmpwalk –v 2c –c public 192.168.17.191 1.3.6.1.2.1.2.2.1.3

2.snmpget

可從指定的主機擷取 MIB 資訊。

3.snmpgetnext

循序存取沒有定義 index 的資訊。

4.snmpset

將指定的資訊寫入定義好的 MIB 資料庫中。

5.snmptrap

大部分 SNMP 流量都是由網管系統流向網路設備;而 snmptrap 是由網路設備主動發送相關必要資訊給網管系統。

6.snmptable

將定義好的 table 格式資料印出在螢幕上。


三、建置 net-snmp 開發環境

1.下載 net-snmp source code

http://www.net-snmp.org/

2.解壓縮

$tar -zxvf net-snmp-5.7.3.tar.gz

3.建立 Makefile

$./configure --prefix=/usr/local/net-snmp
//依序填入相關設定
$sudo make
$sudo make install
$cd /usr/local/net-snmp/sbin
$ ./snmpd -v

NET-SNMP version:  5.7.3
Web:               http://www.net-snmp.org/
Email:             net-snmp-coders@lists.sourceforge.net

4.疑難排解

1. cannot find -lperl

code:

/usr/bin/ld: cannot find -lperl
collect2: error: ld returned 1 exit status
Makefile:976: recipe for target 'libnetsnmpagent.la' failed
make[1]: *** [libnetsnmpagent.la] Error 1
make[1]: *** Waiting for unfinished jobs....

solution:

$sudo apt-get install libperl-dev

四、請閱讀下一章節

本篇先學習相關知識,以及創建開發環境,下一篇介紹,如何寫一個 subagent、跟如何做一個相同 snmpget、snmpset。以及如何利用 broadcast 尋找支援 snmp 的設備,算是一種 snmp network discovery 的應用吧。


  轉載請註明: YuYan's blog Ubuntu 編譯 net-snmp

  目錄