脚本利用SNMP mib/oid分析网卡流量
使用SNMPRFC1213-mib定义进行流量分析
使用snmp管理网络设备,*unix下常用net-snmp的snmpwalk,snmpget等,要得到网络的相关信息,可通过提取RFC1213-mib的定义值得到,例如:要取得远程主机的团体字为”abcd”,IP为172.30.1.8的网络端口流入(IN)的数据流量,可以使用如下命令:
snmpwalk -v 2c -c abcd 172.30.1.8 RFC1213-MIB::ifInOctets 返回各端口信息如下:
IF-MIB::ifInOctets.112 = counter32:165070862
IF-MIB::ifInOctets是 rfc1213的定义端口流入数据量 112是查询网络设备的1模块插槽12端口 counter32后的数值就是该端口的流量,165070862 bits,在*unix下可以通过shell命令取得这两个值 # 首先取得 12 接口的 ifIndex
index=$(snmpwalk -v 2c -c abcd -IR 172.30.1.8 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 abcd -IR -Os 172.30.1.8 ifInOctets.${index}|cut -d ‘:’ -f 2|tr -d ‘[:blank:]‘)
eth12_out=$(snmpget -v 2c -c abcd -IR -Os 172.30.1.8 ifOutOctets.${index}|cut -d ‘:’ -f 2 |tr -d ‘[:blank:]‘)
echo $eth12_in
echo $eth12_out snmp-一般端口流量分析
针对普通网络设备的端口,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
表示有三个网络接口
网络接口明成:
[root@localhost 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连接 取本地网卡的数据流量也可以 #!/bin/bash
# 首先取得 eth0 接口的 ifIndex
index=$(snmpwalk -IR localhost RFC1213-MIB::ifDescr |grep eth0|cut -d ‘=’ -f 1|cut -d ‘.’ -f 2)
# 再通过 snmp 协议取得 ififInOctets 和 ifOutOctets 的值
# 由于在 /etc/snmp.conf 中配置了 defVersion 和 defCommunity ,所以 snmpget 命令不用指定这两个参数
eth0_in=$(snmpget -IR -Os localhost ifInOctets.${index}|cut -d ‘:’ -f 2|tr -d ‘[:blank:]‘)
eth0_out=$(snmpget -IR -Os localhost ifOutOctets.${index}|cut -d ‘:’ -f 2 |tr -d ‘[:blank:]‘)
echo $eth0_in
echo $eth0_out #!/bin/bash
# 首先取得 eth0 接口的 ifIndex
index=$(snmpwalk -IR localhost RFC1213-MIB::ifDescr |grep lo|cut -d ‘=’ -f 1|cut -d ‘.’ -f 2)
lo_in=$(snmpget -IR -Os localhost ifInOctets.${index}|cut -d ‘:’ -f 2|tr -d ‘[:blank:]‘)
lo_out=$(snmpget -IR -Os localhost ifOutOctets.${index}|cut -d ‘:’ -f 2 |tr -d ‘[:blank:]‘)
echo $lo_in
echo $lo_out
建议继续学习:
- 利用脚本分析日志并利用snmp自定义OID,再通过cacti画图 (阅读:8670)
- Linux下三种常用的流量监控软件对比 (阅读:8668)
- nicstat 网络流量统计利器 (阅读:6391)
- cacti+apache+php+mysql+rrdtool搭建流量监控平台 (阅读:5716)
- 通过shell 脚本查看服务器的时时流量 (阅读:4278)
- 网络流量监控软件vnStat (阅读:3759)
- 你的服务器能承受多大流量 (阅读:3754)
- SNMP概述–运维必知的协议基础 (阅读:3775)
- linux单机根据ip查看流量 (阅读:3272)
- 在CGI中通过Etag和Cache-Control来控制流量,访问量及生效时间 (阅读:3181)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:懒人运维 来源: 懒人运维
- 标签: SNMP 流量
- 发布时间:2010-04-30 15:46:24
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成