用于wireshark的NDN包分析器
NDN包解析器需要至少1.12.6版本的Wireshark,并支持LUA。
NDN包的解析支持以下几种情况:
-
NDN数据包封装在IPv4/IPv6 UDP数据包的源或目的端口6363或56363。
-
NDN数据包封装在IPv4/IPv6 TCP段中,其源端口或目的端口为6363。
-
NDN包封装在IPv4/IPv6 TCP/HTTP WebSocket包中,其源端口或目的端口为9696。
-
NDN数据包用EtherType 0x8624封装在以太网帧中。
-
NDN数据包封装在协议类型为0x0077的PPP帧中。
可利用的解析特点: -
当UDP数据包被分割时,将在完整的IP重新组装后进行分析。如果无法完全重新组装(例如,错误的校验和或缺失的片段),则不进行解析。
-
当多个NDN包是单个UDP数据报、TCP段或WebSocket有效负载的一部分时,所有NDN包都会被分解。
-
当单个NDN包分散在多个TCP段或WebSocket有效负载上时,在成功地重构TCP流的必要部分之后,对其进行剖析。如果无法重建TCP流的必要部分(例如,丢失的段),则不执行分析。
-
当一个NDN包没有对齐到段或负载边界时,解析器使用以下伪代码定义的试探法在段内搜索任何有效的NDN包:
for each offset in range (0, packet length)
type <- read TLV VarNumber from (buffer + offset)
length <- read TLV VarNumber from (buffer + offset + length of type field)
if type is either 5 or 6 // Type of NDN Interest of Data packet)
and length is less 8800 // Current (soft) limit for NDN packet size
then
dissect NDN packet from (buffer + offset)
end if
目前,解析器不支持 NDNLPv2包。
用法:
默认情况下,解析脚本ndn.lua安装到/usr/local/share/ndn-dissect-wireshark中。在一些平台上,它也可能安装在/usr/share/ndn-dissect-wireshark或/opt/local/share/ ndn - dissect-wireshark中。要为Wireshark会话启用dissector,使用-x命令行选择,指定到ndn.lua的完整路径。脚本:
wireshark -X lua_script:/usr/local/share/ndn-dissect-wireshark/ndn.lua
类似的,NDN包解析器可以在使用tshark 时启用:
tshark shark -X lua_script:/usr/local/share/ndn-dissect-wireshark/ndn.lua
要为所有未来的Wireshark会话启用NDN包解析器,您可以创建/编辑Wireshark的init.lua脚本,它位于/usr/share/wireshark, /usr/local/share/wireshark,/Applications/Wireshark.app/Contents/Resources/share/wireshark
或类似的位置,这取决于平台和Wireshark的安装方式。dofile命令应该添加到init.lua的末尾文件:
-- dofile("/full/path/to/ndn.lua")
dofile("/usr/local/share/ndn-dissect-wireshark/ndn.lua")
有关如何使用Lua的更详细信息,请参考Lua.wiki。
需要知道的问题:
由于安全问题,在使用根权限启动Wireshark时,不允许加载定制的lua脚本。有两种变通方法:
- 运行具有根权限的Wireshark、dumpcap或tcpdump来捕获文件中的流量,稍后运行不具有根权限的Wireshark并分析捕获的流量。
- (小心潜在的安全隐患)允许非根用户捕获包:
测试
经实验发现,采用将lua脚本嵌入wireshark的方式更合适,但无法用根用户打开嵌入lua的wireshark,因此我们设置wireshark在非根用户下也能抓包,具体参考ubuntu下安装wireshark(以及配置非root)
我们用ndnping工具进行测试,效果如下: