| # NDN Packet Dissector for Wireshark |
| |
| *NOTE: The dissector requires at least version 1.12.6 of Wireshark with LUA support enabled.* |
| |
| The dissection of [NDN packets](https://docs.named-data.net/NDN-packet-spec/current/) |
| is supported in the following cases: |
| |
| - NDN packets are encapsulated in IPv4/IPv6 UDP datagrams with source or destination |
| port 6363 or 56363. |
| |
| - NDN packets are encapsulated in IPv4/IPv6 TCP segments with source or destination |
| port 6363. |
| |
| - NDN packets are encapsulated in IPv4/IPv6 WebSocket packets with source or destination |
| port 9696. |
| |
| - NDN packets are encapsulated in Ethernet frames with EtherType 0x8624. |
| |
| - NDN packets are encapsulated in PPP frames with protocol type 0x0077. |
| |
| ## Available dissection features |
| |
| - When UDP packet is fragmented, the dissection is performed after the full IP reassembly. |
| If the full reassembly is not possible (e.g., a wrong checksum or missing segments), |
| dissection is not performed. |
| |
| - When multiple NDN packets are part of a single UDP datagram, TCP segment, or WebSocket |
| payload, all NDN packets are dissected. |
| |
| - When a single NDN packet is scattered across multiple TCP segments or WebSocket |
| payloads, it is dissected after the successful reconstruction of the necessary portion |
| of the TCP stream. If the reconstruction of the necessary portion of the TCP stream is |
| not possible (e.g., missing segments), the dissection is not performed. |
| |
| - When an NDN packet is not aligned to the segment or payload boundary, the dissector |
| searches for any valid NDN packet within the segment using heuristics defined by the |
| following pseudocode: |
| |
| 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 |
| |
| Currently, the dissector does not support NDNLPv2 packets. |
| |
| ## Usage |
| |
| By default, the dissector script `ndn.lua` is installed into `/usr/local/share/ndn-dissect-wireshark`. |
| On some platforms, it may also be installed in `/usr/share/ndn-dissect-wireshark` or |
| `/opt/local/share/ndn-dissect-wireshark`. To enable the dissector for Wireshark session, |
| use `-X` command line option, specifying the full path to the `ndn.lua` script: |
| |
| ```shell |
| wireshark -X lua_script:/usr/local/share/ndn-dissect-wireshark/ndn.lua |
| ``` |
| |
| Similarly, NDN packets dissector can be enabled when using `tshark`: |
| |
| ```shell |
| tshark shark -X lua_script:/usr/local/share/ndn-dissect-wireshark/ndn.lua |
| ``` |
| |
| To enable NDN packets dissector for all future Wireshark sessions, you can create/edit |
| Wireshark's `init.lua` script, which located in `/usr/share/wireshark`, |
| `/usr/local/share/wireshark`, `/Applications/Wireshark.app/Contents/Resources/share/wireshark`, |
| or similar location depending on the platform and the way Wireshark is installed. The |
| `dofile` command should be added to the end of `init.lua` file: |
| |
| ```lua |
| dofile("/usr/local/share/ndn-dissect-wireshark/ndn.lua") |
| ``` |
| |
| For more detailed information about how to use Lua refer to [Lua wiki](https://wiki.wireshark.org/Lua). |
| |
| ## Known issues |
| |
| Due to security issues, customized lua scripts are not allowed to be loaded when Wireshark |
| is started with root privileges. There are two workarounds: |
| |
| - Run `dumpcap` or `tcpdump` with root privileges to capture traffic to a file, and later |
| run Wireshark *without* root privileges to analyze the captured traffic. |
| |
| - Allow non-root users to capture packets (beware of potential security implications!) |
| |
| * On Linux, you can use `setcap`: |
| |
| sudo setcap cap_net_raw,cap_net_admin=eip /full/path/to/wireshark |
| |
| You may need to install a package to use `setcap` (e.g., `sudo apt install libcap2-bin` on Ubuntu) |
| |
| * On Debian/Ubuntu Linux, capturing traffic with Wireshark by a non-root user can be enabled by |
| adding the user to the `wireshark` group. |
| |
| See Debian's [README file](https://salsa.debian.org/debian/wireshark/-/blob/debian/master/debian/README.Debian) |
| for details. |
| |
| * On macOS, `/dev/bpf*` devices need to be assigned proper permissions. |
| |
| Automatically using ChmodBPF app: |
| |
| curl https://bugs.wireshark.org/bugzilla/attachment.cgi?id=3373 -o ChmodBPF.tar.gz |
| tar zxvf ChmodBPF.tar.gz |
| open ChmodBPF/Install\ ChmodBPF.app |
| |
| or manually: |
| |
| sudo chgrp admin /dev/bpf* |
| sudo chmod g+rw /dev/bpf* |