0

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

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

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

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

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

4

1 回答 1

1

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

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

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

于 2010-12-13T16:59:58.997 回答