我正在尝试让我的 Ubuntu LTS 16.04 服务器将 SNMPTraps 发送到我的 HP OVO 服务器。原因是网络上有一些旧设备无法在发生故障时发送 SNMP 警告,但仍然可以通过联网卡进行访问。因此,我的 Ubuntu 服务器连接到该卡来评估故障节点。我已经使用 Bash 和 Expect 实现了这一目标 - 所以现在我想做的是发送snmptrap
作为我脚本的一部分。我的问题是:
问题
该snmptrap
命令是否需要底层配置?或者它是否像我们(或者也许只是我)认为命令telnet
理所当然的那样从命令行工作?
我问这个问题是因为我正在尝试在公司网络上实现此目的,而目前我的 OVO 服务器没有收到陷阱。因此,我想缩小范围,看看它是否是多个防火墙之一,或者问题是否如前面提到的那样是潜在的配置问题。
语境:
我的期望脚本基本上将网络连接卡管理的每张卡的状态作为数组返回到 bash - 0 表示 OK 1 表示没有回应。所以 Bash 这样做:
errors=$((expect ~/assets/connect))
for i in ${!errors[@]}:
do
if [[ ${errors[$i]} -eq 1 ]]:
then:
snmptrap #stuff goes here; the relevant source IP is saved elsewhere & available - I want the SNMP trap to send a "node $i" down.
fi
done
答案1
snmptrap
不需要任何特定配置。
要验证您的脚本是否正在发送陷阱,您可以使用 tcpdump 来监视流量。 SNMP 陷阱是 UDP,通常发往端口 162,因此这将起作用:
tcpdump -i <interface> udp dst port 162
然后,在另一个屏幕或终端中,首先本地测试 snmptrap 命令,然后嵌入到脚本中:
snmptrap -v 2c -c public ov.example.com '' 1.3.6.1.4.1.6032.1 1.3.6.1.4.1.6032.1 s "this is just a generic message"
您应该看到类似于以下内容的输出:
14:52:32.966387 IP server.example.com.43066 > ov.example.com.snmp-trap: V2Trap(114) system.sysUpTime.0=31777102 S:1.1.4.1.0=E:6032.1 E:6032.1="this is just a generic message"
如果您看到 中的输出tcpdump
,那么您就知道snmptrap
正在本地主机上运行,因为数据包正在离开系统。如果是这种情况,请tcpdump
在接收器上运行相同的命令以查看是否收到陷阱。如果您从多个源接收陷阱,在这种情况下按主机过滤会很方便:
tcpdump -i <interface> udp and src host <sender name/ip> dst port and dst port 162
如果您在接收方看不到数据包,但看到它们离开发送方,则说明网络中有某些东西阻止了它们。