【问题标题】:Perl network frame/packet parserPerl 网络帧/数据包解析器
【发布时间】:2010-12-10 22:19:02
【问题描述】:

作为个人项目的一部分,我正在编写一个小型嗅探器。我正在使用Net::Pcap(非常棒的工具)。

在数据包处理循环中,我使用出色的Net::Frame 来解包所有标头并获取数据。我开始担心这可能效率不高(Net::Frame 很棒,但似乎超出了我对这个项目的需要)。

另外我不喜欢对于某些 Debian 系统,我必须手动编译 libdumbnet(官方 apt 存储库中提供的软件包似乎不起作用,Net-Libdnet-0.92 不喜欢它)。

我想要的只是获取 TCP 段内的有效负载。有没有其他选择? 谢谢。

附:如果我只是拿起数据包并在其中搜索某种模式,那真的会很糟糕(阅读“thedailywtf.comworthy”)吗?

【问题讨论】:

  • 我猜 unpack() 在处理 TCP 数据包方面会比 RE 更好。

标签: perl libpcap packet-sniffers


【解决方案1】:

我最近用 C 语言编写了一个 PCAP 转储文件解包器,然后希望我只是使用开源库来代替(当我意识到它们存在并且非常易于使用时)。我不得不说,由于它是一种二进制文件格式,在 C 中可能比在 Perl 中更容易做到,但毫无疑问,我会受到所有 Perl 狂热分子的嘘声。

我要说的是,使用现有代码比自己编写代码要快,但如果你真的想要,文件格式可以在线免费获得,而且非常简单。

至于搜索模式,它几乎肯定是行不通的。它是一种二进制文件格式,数据包可以分段和/或复制,因此了解消息开始和结束位置的唯一可靠方法是解包标头、检查数据包标志、读取内容长度字段等。进行模式搜索可能在 90% 的情况下都有效,但有时您会发现一个数据包捕获日志,这意味着您需要更改代码。然后过了一会儿又找到另一个数据包,这意味着另一个变化,依此类推。

【讨论】:

  • 只是好奇:您希望使用过哪些开源库?
  • libpcap.它是 tcpdump、Wireshark 等使用的底层 PCAP 库。它可能也是 Net::Pcap 和 Net::Frame 的底层库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 2011-01-23
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多