#pdl #wireshark #dissector

bin+lib pdl-dissector

从 PDL 编写的数据包描述生成 Wireshark 解析器

1 个不稳定版本

0.1.0 2024 年 5 月 5 日

解析器实现 中排名 1521

MIT 许可证

95KB
2K SLoC

PDL 解析器

从用 PDL 编写的二进制协议数据包的定义生成 Wireshark 解析器。

PDL 是一种用于编写二进制协议数据包定义的领域特定语言。通过使用此工具,您可以生成 Wireshark 解析器的 lua 代码。该工具的输出是 lua 函数定义,可以插入到 Wireshark 解析器表中。

用法

要使用此工具,首先编写一个 PDL 文件。有关如何编写 PDL 的信息,请参阅 PDL 项目 和其 语言参考

例如,如果您有此 PDL 文件

little_endian_packets

struct PcapHeader {
  _fixed_ = 0xa1b2c3d4: 32, /* magic number */
  version_major: 16,
  version_minor: 16,
  thiszone: 32,  /* GMT to local correction */
  sigfigs: 32,  /* accuracy of timestamps */
  snaplen: 32,  /* max length of captured packets, in octets */
  network: 32,  /* data link type */
}

struct PcapRecord {
  ts_sec: 32,  /* timestamp seconds */
  ts_usec: 32,  /* timestamp microseconds */
  _size_(_payload_): 32, /* number of octets of packet saved in file */
  orig_len: 32,  /* actual length of packet */
  _payload_,  /* packet octets */
}

packet PcapFile {
  header: PcapHeader,
  records: PcapRecord[],
}

您可以使用此工具运行

# pdl_dissector <PDL FILE> <PACKET NAME>...
pdl_dissector examples/pcap/pcap.pdl PcapFile > examples/pcap/pcap_dissector.lua

这将生成一个包含协议 PcapFile_protocol 的 lua 解析器文件。可以使用类似以下方式注册协议

-- Always dissect contents at port 8000 as PCAP
DissectorTable.get("tcp.port"):add(8000, PcapFile_protocol)

-- Alternatively, you can add it as one of the "decode as" dissectors:
DissectorTable.get("tcp.port"):add_for_decode_as(PcapFile_protocol)

这可以通过手动添加到生成的文件、使用 bash 脚本追加到文件或使用 lua 的 require 完成。

例如

pdl_dissector examples/pcap/pcap.pdl PcapFile > examples/pcap/pcap_dissector.lua && \
    echo 'DissectorTable.get("tcp.port"):add(8000, PcapFile_protocol)' >> examples/pcap/pcap_dissector.lua

对于基本用法,这就是您需要的一切。只需将其放置在您平台的 Wireshark 插件目录 中,然后启动 Wireshark 以开始使用。

在 Windows 上

个人插件文件夹是 %APPDATA%\Wireshark\plugins。全局插件文件夹是 WIRESHARK\plugins。

在类 Unix 系统上

个人插件文件夹是 ~/.local/lib/wireshark/plugins。

有关更高级的用法,请参阅 Wireshark 文档

示例

要查看生成的 lua 文件的示例,请参阅 examples/ 目录。您还可以参考 tests/integration_test.rs,它运行生成的解析器并断言它对解析输出进行了断言。

依赖项

~6–15MB
~176K SLoC