您现在的位置是:娱乐 >>正文

shell脚本使用snmp访问

娱乐5人已围观

简介 shell脚本使用snmp访问 网络设备不开口说话,但snmp是它们的通用语言。我上周排查一台核心交换机流量异常,登录设备看计数器太慢,写了个二十行的shell脚本,用snmpwalk把端口流量拉下 ...

shell脚本使用snmp访问

网络设备不开口说话,本使但snmp是本使它们的通用语言。我上周排查一台核心交换机流量异常,本使登录设备看计数器太慢,本使写了个二十行的本使shell脚本,用snmpwalk把端口流量拉下来,本使三秒钟定位到故障端口。本使这就是本使snmp在shell里的价值——把网络设备变成可编程的数据源。

先确认环境。本使Linux下装snmp工具链:yum install net-snmp-utils或者apt install snmp。本使装完就能用snmpget和snmpwalk。本使前者取单个OID值,本使后者遍历子树。本使跟设备通信要带community string,本使默认是本使public,生产环境多半改了。我习惯把community和IP写进变量,脚本复用方便。

COMMUNITY="cisco123" HOST="192.168.1.1" OID_SYS="1.3.6.1.2.1.1.1.0" snmpget -v2c -c $COMMUNITY $HOST $OID_SYS 

上面这行能拿到系统描述。但真正干活得靠snmpwalk。想监控接口流量,得知道接口索引。先遍历接口表:snmpwalk -v2c -c $COMMUNITY $HOST 1.3.6.1.2.1.2.2.1.2,返回的是接口名和索引的映射。输出格式是OID = 值,用awk切分就行。注意OID最后一位就是接口索引,这个数字在后续流量查询里要用。

流量监控的核心OID是ifHCInOctets(1.3.6.1.2.1.31.1.1.1.6)和ifHCOutOctets(1.3.6.1.2.1.31.1.1.1.10)。它们是64位计数器,单位是字节。取两次值做差,除以时间间隔,就是速率。shell里做减法没问题,但计数器有回绕风险——好在64位计数器在千兆网下要几百年才回绕,可以忽略。

写个完整的监控脚本。核心思路:第一次采样存值,sleep 5秒,第二次采样,计算差值。我实际跑过的版本长这样:

#!/bin/bash COMMUNITY="public" HOST="192.168.1.1" IF_INDEX="1" OID_IN="1.3.6.1.2.1.31.1.1.1.6.$IF_INDEX" OID_OUT="1.3.6.1.2.1.31.1.1.1.10.$IF_INDEX" get_counter() {  snmpget -v2c -c $COMMUNITY -Oqv $HOST $1 2>/dev/null } IN1=$(get_counter $OID_IN) OUT1=$(get_counter $OID_OUT) sleep 5 IN2=$(get_counter $OID_IN) OUT2=$(get_counter $OID_OUT) IN_RATE=$(( (IN2 - IN1) * 8 / 5 )) OUT_RATE=$(( (OUT2 - OUT1) * 8 / 5 )) echo "入口速率: ${ IN_RATE} bps" echo "出口速率: ${ OUT_RATE} bps" 

注意-Oqv参数,它让snmpget只返回纯数值,不带OID和类型前缀,省掉awk解析。这个细节能省不少事。算速率时乘8是字节转比特,除以5是时间间隔。要是间隔设60秒,除以60就行。

踩过的坑得说。有些老设备不支持64位计数器,返回的ifInOctets(1.3.6.1.2.1.2.2.1.10)是32位,流量稍大就回绕。判断办法是看snmpget返回值的类型,如果显示Counter32,就得自己处理回绕逻辑——检测当前值小于上次值,就用最大值减去上次值加上当前值。麻烦,但比买商业监控软件便宜。

还有超时问题。snmp默认超时1秒,重试5次。设备CPU忙时可能响应慢,脚本就卡住了。我习惯加-t 3 -r 0参数,超时设3秒不重试。反正脚本里本来就有循环,失败就跳过这次采样,别让单次故障拖垮整个监控任务。

脚本写完后,丢进crontab做定时采集。每5分钟跑一次,输出追加到日志文件。再用awk从日志里提取峰值,配合sendmail发告警。全套下来不到一百行,比部署一套zabbix轻量多了。当然,要监控几十台设备还是得上正规系统,但临时排查、小规模监控,shell加snmp足够锋利。

最后提醒一点:snmp community是明文传输,别在不可信网络上用。真要跨公网采集,加个VPN隧道或者用snmpv3的加密认证。安全这根弦,什么时候都不能松。

Tags:

相关文章

  • 快手盗号神器

    娱乐

    快手账号被盗,往往不是技术多高明,而是你太配合了。去年我朋友老周,粉丝八万,卖二手车的。一天晚上他收到条私信,对方自称快手官方客服,说他的账号涉嫌违规卖车,要冻结,得赶紧点链接申诉。老周慌了,点进去, ...

    【娱乐】

    阅读更多
  • 网恋照妖镜网站

    娱乐

    有人在网上跟你聊了三个月,每天早安晚安,发来的照片像杂志内页,声音好听,性格温柔,还总说“遇到你是我最幸运的事”。你心动了,觉得这回是真的。然后你朋友帮你把那张照片丢进一个叫“网恋照妖镜”的网站,三秒 ...

    【娱乐】

    阅读更多
  • jsp查询数据库并显示页面上

    娱乐

    打开Tomcat的日志,看到一行SQLException,心里就有数了——JSP页面上那个空白的表格,问题出在数据库连接上。很多人第一次写JSP查数据,代码看着没问题,页面就是不出东西。我见过一个案例 ...

    【娱乐】

    阅读更多


友情链接