snmp检查
cat /opt/app/ssa/check_snmp.sh EOF #!/bin/bash # 用法: ./check_snmp.sh ip [community] # 例: ./check_snmp.sh 192.168.0.1 public IP$1 COMM${2:-public} [ -z $IP ] { echo Usage: $0 ip [community]; exit 1; } echo SNMP 服务检测 echo 目标: $IP community: $COMM echo # 1) ICMP echo -n [1] ICMP : if ping -c 1 -W 2 $IP /dev/null 21; then echo OK (主机在线); else echo FAIL (主机不通); exit 1; fi # 2) UDP 161 echo -n [2] UDP/161 : nmap_out$(nmap -sU -p 161 --reason $IP 2/dev/null | grep ^161 | awk {print $2,$3}) echo $nmap_out # 3) SNMP 协议(v2c) echo -n [3] SNMP v2c : out$(snmpget -v 2c -c $COMM -t 3 -r 1 $IP 1.3.6.1.2.1.1.1.0 21) if echo $out | grep -q STRING; then echo OK - $(echo $out | sed s/.*STRING: //) echo echo [结论] SNMP 已开通,且 community 正确 exit 0 else echo FAIL - $(echo $out | head -1) fi # 4) SNMP 协议(v1 兜底) echo -n [4] SNMP v1 : out$(snmpget -v 1 -c $COMM -t 3 -r 1 $IP 1.3.6.1.2.1.1.1.0 21) if echo $out | grep -q STRING; then echo OK - 仅支持 v1; else echo FAIL; fi # 5) 抓包(终极判断) echo [5] 抓包诊断(10秒)... tcpdump -i any -nn udp port 161 and host $IP -c 10 -w /tmp/snmp_$IP.pcap /dev/null 21 TPID$! sleep 1 snmpget -v 2c -c $COMM -t 3 -r 0 $IP 1.3.6.1.2.1.1.1.0 /dev/null 21 sleep 5 kill $TPID 2/dev/null wait $TPID 2/dev/null sent$(tcpdump -nn -r /tmp/snmp_$IP.pcap 2/dev/null | grep -cE $IP\.161 ) recv$(tcpdump -nn -r /tmp/snmp_$IP.pcap 2/dev/null | grep -cE $IP\.161 ) echo 发送请求包: $sent echo 收到回包 : $recv echo echo if [ $recv -gt 0 ]; then echo [结论] SNMP 服务【已开通】,但被限制了 echo 回了包但 snmpget 不识别,常见原因: echo (a) community 字不对 echo (b) ACL 限制了源 IP echo (c) snmpd 回了 authenticationFailure echo 诊断命令: echo snmpget -d -v 2c -c $COMM $IP 1.3.6.1.2.1.1.1.0 # 看回包内容 echo snmpget -v 2c -c 试别的community $IP 1.3.6.1.2.1.1.1.0 elif [ $sent -gt 0 ]; then echo [结论] SNMP 服务【未开通】或被防火墙静默丢弃 echo 有请求无任何响应,可能原因: echo (a) snmpd 未启动 echo (b) 防火墙 drop 了 UDP 161 echo (c) ACL 配置成 silent-drop else echo [结论] 抓包失败,检查 tcpdump 权限或网络 fi echo EOF[rootiZb5g01h403pdu8w4b49ohZ ssa]# ./check_snmp.sh 192.168.0.1 public SNMP 服务检测 目标: 192.168.0.1 community: public [1] ICMP : OK (主机在线) [2] UDP/161 : open snmp [3] SNMP v2c : OK - Linux localhost.localdomain 4.19.0-91.82.179.3.uelc20.x86_64 #1 SMP Wed Jul 10 20:26:01 CST 2024 x86_64 [结论] SNMP 已开通,且 community 正确[rootiZb5g01h403pdu8w4b49ohZ ssa]# ./check_snmp.sh 192.168.0.2 public SNMP 服务检测 目标: 192.168.0.2 community: public [1] ICMP : OK (主机在线) [2] UDP/161 : open snmp [3] SNMP v2c : FAIL - Timeout: No Response from 10.16.228.80. [4] SNMP v1 : FAIL [5] 抓包诊断(10秒)... 发送请求包: 0 收到回包 : 0 [结论] 抓包失败,检查 tcpdump 权限或网络