Perl网络帧/包解析器

Perl网络帧/包解析器,perl,libpcap,packet-sniffers,Perl,Libpcap,Packet Sniffers,作为个人项目的一部分,我正在编写一个小型嗅探器。我正在使用Net::Pcap(非常棒的工具) 在包处理循环中,我使用优秀的Net::Frame解包所有头并获取数据。我开始担心这可能不是非常有效(Net::Frame很好,但似乎超出了这个项目的需要) 另外,我不喜欢某些Debian系统必须手动编译libdumbnet(官方apt存储库中提供的包似乎不起作用,Net-Libdnet-0.92不喜欢它) 我只想得到TCP段中的有效负载。还有别的选择吗? 多谢各位 另外,如果我只是拿着数据包搜索一些模式

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

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

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

我只想得到TCP段中的有效负载。还有别的选择吗? 多谢各位


另外,如果我只是拿着数据包搜索一些模式,这真的会很糟糕吗(读“thedailywtf.com worthy”),我最近用C写了一个PCAP转储文件解压程序,后来我希望我只是使用开源库(当我意识到它们存在并且很容易使用时)。我不得不说,由于它是一种二进制文件格式,用C语言可能比用Perl语言更容易实现,但毫无疑问,我会受到所有Perl狂热者的嘘声

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


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

我想解包()比重新处理TCP数据包更好。只是好奇:你希望使用什么开源库?libpcap。它是tcpdump、Wireshark等使用的底层PCAP库。它可能也是Net::PCAP和Net::Frame的底层库。