1. 程式人生 > >snmp獲取本機網路流量

snmp獲取本機網路流量

本文對使用snmp工具取得伺服器/交換機的網口的流量情況進行了簡單的總結,前提是系統的snmp服務端已經在正常工作且能接受操作端的查詢。 取得所有網/埠的描述 snmpwalk -v 2c -c public ipaddr ifDescr cisco交換機埠流量取值需要注意的問題: If interfaces are in trunk mode, you won't see them with that OID. CISCO-VLAN-MEMBERSHIP-MIB is only for non-trunking ports. You can try vlanTrunkPortDynamicStatus from CISCO-VTP-MIB to check. 得到機器的網路介面: snmpwalk -v 2c -c public 192.168.1.20 ifDescr or snmpwalk -v 2c -c public 192.168.1.20 .1.3.6.1.2.1.2.2.1.2 You should get a result like this: IF-MIB::ifDescr.1 = STRING: lo IF-MIB::ifDescr.2 = STRING: eth0 IF-MIB::ifDescr.3 = STRING: wifi0 IF-MIB::ifDescr.4 = STRING: ath0 IF-MIB::ifDescr.5 = STRING: br0 # snmpwalk -v1 -c public 192.168.1.20 ifDescr 取得網絡卡的進/出流量計數: # snmpwalk -v1 -c public 192.168.1.20 ifinOctets IF-MIB::ifInOctets.1 = Counter32: 0 IF-MIB::ifInOctets.2 = Counter32: 186740992 IF-MIB::ifInOctets.3 = Counter32: 4117381100 IF-MIB::ifInOctets.4 = Counter32: 3824919421 IF-MIB::ifInOctets.5 = Counter32: 569163 # snmpwalk -v1 -c public 192.168.1.20 ifoutOctets IF-MIB::ifOutOctets.1 = Counter32: 0 IF-MIB::ifOutOctets.2 = Counter32: 3824764209 IF-MIB::ifOutOctets.3 = Counter32: 305295003 IF-MIB::ifOutOctets.4 = Counter32: 168468497 IF-MIB::ifOutOctets.5 = Counter32: 172865 它們分別代表的意義 ifHCOutOctets OID 1.3.6.1.2.1.31.1.1.1.10 - outgoing traffic (bytes) ifHCInOctets OID 1.3.6.1.2.1.31.1.1.1.6 - incoming traffic (bytes) 取得交換機埠1的流量 statistic for port 1, then OID is: 1.3.6.1.2.1.31.1.1.1.10.1 使用SNMP RFC1213-mib定義進行流量分析 使用snmp管理網路裝置,unix下常用net-snmp的snmpwalk,snmpget等,要得到網路的相關資訊,可通過提取'RFC1213-mib'的定義值得到。例如:要取得遠端主機的團體字為'public',IP為'192.168.1.20'的網路埠流入(IN)的資料流量,可以使用如下命令: snmpwalk -v 2c -c public 192.168.1.20 RFC1213-MIB::ifInOctets 返回各埠資訊如下: IF-MIB::ifInOctets.112 = counter32:165070862     IF-MIB::ifInOctets是 rfc1213的定義埠流入資料量 112是查詢網路裝置的1模組插槽12埠      counter32後的數值就是該埠的流量:165070862 bits,在終端下可以通過shell命令取得這兩個值  # 首先取得 12 介面的 ifIndex index=$(snmpwalk -v 2c -c public -IR 192.168.1.20 RFC1213-MIB::ifDescr |grep IF-MIB::ifInOctets.112 |cut -d ‘=’ -f 1|cut -d ‘.’ -f 2) # 再通過 snmp 協議取得 ififInOctets 和 ifOutOctets 的值 # 也可在 /etc/snmp.conf 中配置好'defVersion'和'defCommunity',這樣 snmpget 命令不用指定這兩個引數: eth12_in=$(snmpget -v 2c -c public  -IR -Os 192.168.1.20 ifInOctets.${index}|cut -d ‘:’ -f 2|tr -d ‘[:blank:]‘) eth12_out=$(snmpget -v 2c -c public  -IR -Os 192.168.1.20 ifOutOctets.${index}|cut -d ‘:’ -f 2 |tr -d ‘[:blank:]‘) echo $eth12_in echo $eth12_out 一般埠流量分析 針對普通網路裝置的埠,MIB的相關定義是Interface組,主要管理如下資訊: ifIndex 埠索引號 ifDescr 埠描述 ifType 埠型別 ifMtu 最大傳輸包位元組數 ifSpeed 埠速度 ifPhysAddress 實體地址 ifOperStatus 操作狀態 ifLastChange 上次狀態更新時間 *ifInOctets 輸入位元組數 *ifInUcastPkts 輸入非廣播包數 *ifInNUcastPkts 輸入廣播包數 *ifInDiscards 輸入包丟棄數 *ifInErrors 輸入包錯誤數 *ifInUnknownProtos 輸入未知協議包數 *ifOutOctets 輸出位元組數 *ifOutUcastPkts 輸出非廣播包數 *ifOutNUcastPkts 輸出廣播包數 *ifOutDiscards 輸出包丟棄數 *ifOutErrors 輸出包錯誤數 ifOutQLen 輸出隊長 其中,*號標識的是與網路流量有關的資訊。 例如看看網路介面: #snmpwalk -v 1 222.90.47.169 -c public ifIndex 輸出: IF-MIB::ifIndex.1 = INTEGER: 1 IF-MIB::ifIndex.2 = INTEGER: 2 IF-MIB::ifIndex.3 = INTEGER: 3 表示有三個網路介面 網路介面明成: [

[email protected] snmp]# snmpwalk -v 1 222.90.47.169 -c public ifDescr IF-MIB::ifDescr.1 = STRING: lo IF-MIB::ifDescr.2 = STRING: eth0 IF-MIB::ifDescr.3 = STRING: ppp0 三個介面分別為 1 本地迴路 2 乙太網卡 3 ADSL連線 通過 snmp 協議取得 ififInOctets 和 ifOutOctets 的值 # snmpwalk -v1 -c public ipaddr ififInOctets/ifOutOctets 注意:埠的流量是一個累加值,即是從其加電工作開始到取數時,流經其的注意,因此這個數值是一直增加的。但受制於硬體的32位模式,處於32的系統下,這個值在超過4G後,會重新計數,64位系統沒有這個限制。