我正在写一个小嗅探器作为个人项目的一部分。我正在使用Net::Pcap
(非常棒的工具)。
在数据包处理循环中,我使用优秀的Net::Frame
来解压缩所有标头并获取数据。我担心这可能不是非常有效(Net::Frame
很棒,但似乎比我对这个项目的要求更多。)
另外我不喜欢对于一些Debian系统我必须手动编译libdumbnet(官方apt存储库中提供的包似乎不起作用,Net-Libdnet-0.92
不喜欢它。)
我想要的只是获取TCP段内的有效负载。还有其他选择吗? 谢谢。
P.S。它是真的非常糟糕(请阅读“thedailywtf.com值得”)如果我只是拿着包并搜索它的某些模式?
答案 0 :(得分:1)
我最近在C中编写了一个PCAP转储文件解包器,然后希望我只使用开源库(当我意识到它们存在且非常容易使用时)。我不得不说,因为它是二进制文件格式,所以在C语言中可能比Perl更容易,但我毫无疑问会被所有Perl狂热分子所夸大。
我要说的是,使用现有代码会比自己编码更快,但如果你真的想要,那么文件格式可以在网上免费获得,而且非常简单。
至于搜索模式,它几乎肯定不会起作用。它是二进制文件格式,数据包可以分段和/或复制,因此了解消息开始和结束位置的唯一可靠方法是解压缩标头,检查数据包标志,读取内容长度字段等。进行模式搜索可能会在90%的时间内完成,但在某些时候您会发现数据包捕获日志,这意味着您需要更改代码。然后一段时间后发现另一个数据包意味着另一个变化,依此类推。等等。