Wireshark 是最富盛名的开源抓包工具了,在电信网管开发的日常工作中是不可或缺的,经常需要抓包分析。那有没有办法可以在抓到的包中直接显示 snmp mib 的名字,而不是 OID 呢?办法当然是有的,也很简单,在官方的文档里面就有说明了。这里讲下实际配置步骤:
1. 把 mib 文件放到 “C:\Program Files\Wireshark\snmp\mibs” 目录下。
2. 打开 “%APPDATA%\Wireshark\smi_modules” 文件,在里面按原有的格式,添加mib名字。
3. 修改 Wireshark 的配置,选中 “Enable OID resolution”,”Suppress SMI errors”(如下图)。修改之后关闭再重新打开 Wireshark 就生效了。

注意事项:
1. 如果看到的配置界面跟上面的不一样的话,是 Wireshark 版本太低了,升级到最新的版本即可。
2. 不是所有的 mib 文件都能被正确的解析,这是一个已知问题,因为其用的开源的 mib 解析模块 libsmi 有问题。如果发现加了某几个 mib 之后 Wireshark 就启动不了了,那就还是把改动回退吧。
参考阅读:1,2,3。
另外,因为要求 mib 文件的名字必须是 mib 模块的名字,但是存在文件名和模块名不一致的情况,写了个 groovy 脚本,对指定目录下的 mib 文件进行重命名:
import java.util.regex.*
def dir = new File('''C:\Program Files\Wireshark\snmp\mibs''')
def pattern = ~/(?ms).*^\s*([\w\-]+)\s*DEFINITIONS ::= BEGIN\s*$.*/
dir.eachFileRecurse{ f ->
if ( f.file && f.name.endsWith(".mib") ) {
Matcher m = pattern.matcher( f.getText() );
if (m.matches()) {
f.renameTo( f.parentFile.path + "\\" + m[0][1] )
println '"' + m[0][1] + '"'
}
}
}
AdventNet Simulator 是一个模拟 SNMP Agent 的工具,支持常规的 SNMP Get / GetBulk / Set 等操作,对于网管软件的开发很有帮助。用这个工具,可以做到不需要实际的设备,而只需要设备相关的 SNMP mib 文件就可以模拟出一个“真实”的节点设备。在实际的开发过程中,往往网管和设备是同时开始的,在设备开发还没有结束的情况下,网管就可以用模拟器先模拟出一个设备进行基本的集成测试。
这里假定已经在 AdventNet Simulator 里有了一个模拟出的设备了,并且选择的方式是 XML 方式。那如果 mib 文件发生了改动,这个时候通常的做法是先 Stop Agent,然后在左边的 mib 树上选中要更新的 mib,点击 Unload Mib File,之后再重新加载就可以了。但是这样做带来的一个问题是之前配置的所有的数据可能都会丢掉,需要重新配,比较麻烦。
如果改动的 mib 不是很多的话,也可以直接修改 xml 文件来使模拟的设备支持新的 mib 表。
假设<SimulatorDir>是 AdventNet Simulator 的安装目录,<DeviceName>是模拟的设备的名称,新增的表名字叫 NewMibTable。做法如下:
- 进入 <SimulatorDir>/snmpagents/<DeviceName> 目录
- 打开 <DeviceName>_netSimMapping.xml,参考该文件中已有的其他表项,添加新增表的定义。
- 打开 <DeviceName>_netSimRegister.xml,同2,参考文件中已有的其他项,添加新增增表的定义。
- 找一个跟新增的项比较接近的 mib 表,拷贝粘贴重命名,生成 <DeviceName>_NewMibTable.xml,<DeviceName>_NewMibTable1.xml,<DeviceName>_NewMibTable_org.xml,<DeviceName>_NewMibTable1_org.xml,同样修改里面的数据,以适合这个新增表各个字段的类型和数值。
按照上述步骤,做完了之后再重新 Start Agent,然后验证下看这个新增的表格增删改数据有没有问题。如果没有问题,那恭喜你,已经成功了。如果不能增加修改的话怎么办呢?那就耐心点,再检查下上面的一些配置文件是不是都配置的正确,有配的不对的就改掉,应该就好了。
另外,如果想实现其他的一些目的,比如不在模拟器 UI 里面增加数据,而直接修改 XML 文件等等;有了上面的经验,已经也能够想到办法的了。