Perl网络帧/包解析器

时间:2010-12-10 22:19:02

标签: perl libpcap packet-sniffers

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

在数据包处理循环中,我使用优秀的Net::Frame来解压缩所有标头并获取数据。我担心这可能不是非常有效(Net::Frame很棒,但似乎比我对这个项目的要求更多。)

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

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

P.S。它是真的非常糟糕(请阅读“thedailywtf.com值得”)如果我只是拿着包并搜索它的某些模式?

1 个答案:

答案 0 :(得分:1)

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

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

至于搜索模式,它几乎肯定不会起作用。它是二进制文件格式,数据包可以分段和/或复制,因此了解消息开始和结束位置的唯一可靠方法是解压缩标头,检查数据包标志,读取内容长度字段等。进行模式搜索可能会在90%的时间内完成,但在某些时候您会发现数据包捕获日志,这意味着您需要更改代码。然后一段时间后发现另一个数据包意味着另一个变化,依此类推。等等。