启动网络发现的网络拓扑呈现错误
在实验中我发现,进入SNMPc 工具后,因为先前我是开启了网络发现的功能的,因此程序会自动生成拓补图,自动生成的网络规划是错误的,如下图所示:
我的设备:cdypc没有自动匹配到192.168.31.0的网段中,查看设备在SNMPc中的设备信息,我发现,cdypc的IP确实不在192.168.31.0的网段下。
分析原因为,因为我的电脑中还有安装VMware虚拟机,并且虚拟机的网卡是开着的,导致了SNMPc 程序将我的设备的IP归到了虚拟机的网卡上,在尝试禁用虚拟机的网卡后,cdypc在网络发现阶段成功归结到了192.168.31.0的网段中了。
同理,实验过程中,我发现同一个网段中的电脑(连接在宿舍的WLAN)下的设备也出现了该情况,也是因为映射到了虚拟机网卡的缘故。
正确的网络发现后的状态如下图所示:
实验中遇到的问题及解决
启动方式错误—导致连接失败
在未开启主机中的SNMP服务时,尝试启动SNMPc网络管理软件会提示服务失败,直接的显现就是控制台的显示界面没有有效的网段信息和SNMP的管理信息以及网络拓扑。
所以在,尝试使用SNMPc网管软件时,一定要打开本机的SNMP服务功能,这在初次使用该软件时是及其容易出现的状况。
当然,开启了本地SNMP服务后也不一定能显示正确的网络管理信息,还要进一步的配置正确网络发现的种子和设置正确的可以搜索到的社区,并要启动网络发现等才有可能显示正确的网络管理信息。
种子配置错误导致未显示网络拓扑
在实验中,要正确配置种子才可以显示正确的网络拓扑,这里因为我将种子设置为了本机的IP地址而不是本机所在的网段地址所以SNMPc软件没有显示出该网段中的设备拓扑。
其他可能的问题
- SNMP通信错误:由于SNMP协议是基于UDP的,因此数据包可能会发生丢失、重传等情况,导致SNMP请求失败。在这种情况下,可以检查设备的SNMP配置是否正确,或者考虑使用其他版本的SNMP(例如从v1切换到v2c)来测试。
- 设备离线或无法访问:如果设备已关闭或者设备所在的网络通道存在故障,则可能无法连接到该设备。因此在使用SNMPc时,需要确保设备处于联网状态,或者检查网络配置是否正确。
- 配置错误:SNMPc的功能非常强大,但是配置也相对复杂,如果没有正确配置SNMPc,则可能会出现许多问题。因此,在使用时需要仔细阅读文档和指南,并确保配置选项正确设置。
SNMP问题排查思路:
SNMP(Simple Network Management Protocol,简单网络管理协议)是一种用于网络管理的标准协议。在进行 SNMP 网络管理过程中,可能会遇到以下问题:
SNMP 版本不匹配:SNMP 有三个版本,分别为 SNMPv1、SNMPv2 和 SNMPv3。如果使用了不同版本的 SNMP 进行通信,可能会导致协议解析错误。需要检查使用的 SNMP 版本是否一致。
通信错误:在进行 SNMP 通信时,可能出现网络丢包、超时或者错误的响应等问题。需要检查网络连接状态和防火墙设置等,确保 SNMP 通信正常进行。
数据库配置问题:在进行 SNMP 网络管理时,可能需要使用到数据库来存储设备的信息。如果数据库配置不正确,可能导致 SNMP 管理异常。需要检查数据库连接是否正常,并确保数据库配置正确。
权限问题:SNMP 网络管理需要使用到设备的管理权限。如果权限不足,可能无法完成相应的操作。需要检查所使用的 SNMP 身份验证和授权设置是否正确,并确保具有足够的操作权限。
设备支持问题:不同的设备可能对 SNMP 协议的实现有所不同,可能存在兼容性问题。需要检查设备是否支持 SNMP 协议,以及相应设备的 SNMP 配置是否正确。
针对这些问题,可以采取以下解决方法:
- 确认所使用的 SNMP 版本,并在进行 SNMP 通信之前进行版本匹配。
- 检查网络连接状态和防火墙设置,并尝试使用 ping 命令等工具测试网络连接。
- 检查数据库连接状态和配置,并确保数据库配置正确。
- 检查 SNMP 身份验证和授权设置,并确认所使用的身份具有足够的操作权限。
- 检查设备是否支持 SNMP 协议,并确认相应设备的 SNMP 配置是否正确。如有必要,可查看设备的文档或咨询相关技术支持。
通过snmp协议批量请求oid时,会遇到部分设备返回oid信息为空
排查日志后,发现是返回的response为空,但抓包发现response是有值的,而且会重复请求,同一个oid的请求时间和响应时间相差30s左右,然后通过ping命令发现有丢包问题,分析下来是网络问题,于是就调大snmp连接超时时间(亲身经历过)
ResponseEvent responseEvent = snmp.send(pdu, target);
PDU response = responseEvent.getResponse();
CommunityTarget target = new CommunityTarget();
target.setTimeout(60000);