我正在尝试让我的 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
snmptrap
不需要任何特定配置。要验证您的脚本是否正在发送陷阱,您可以使用 tcpdump 来观察流量。SNMP 陷阱是 UDP 并且通常发往端口 162,因此这将起作用:
然后,在另一个屏幕或终端中,首先在本地测试您的 snmptrap 命令,然后嵌入到您的脚本中:
您应该看到类似于以下内容的输出:
如果您在 中看到输出
tcpdump
,那么您知道snmptrap
正在本地主机上工作,因为数据包正在离开 systemm。如果是这种情况,tcpdump
请在接收器上运行相同的命令以查看是否正在接收它们的陷阱。如果您从多个来源接收陷阱,则在这种情况下按主机过滤会很方便:如果您在接收器上看不到数据包,但看到它们离开发送器,则说明网络中存在阻止它们的东西。