我正在编写一个程序来重建Snort捕获的TCP流。我读过的关于会话重建的大部分例子都是:
我目前的解决方案是编写自己的pcap文件解析器,因为格式很简单。我将每个数据包的偏移保存在向量中,并在我通过之后重新加载每个数据包。像libpcap一样,它一次只将一个数据包流入内存;我只使用序列号和标志进行排序,而不是分组数据。与libpcap不同,它明显更慢。使用libpcap处理570 MB捕获大约需要0.9秒,而我的代码需要3.2秒。但是,我的优点是能够在不重新加载整个捕获的情况下向后搜索。
如果我坚持使用libpcap来解决速度问题,我想我可以创建一个currentOffset
变量,初始值为24(pcap文件全局标题的大小),将其推送到向量每次我加载一个新数据包,并在每次用{+ 1}}调用数据包大小+ 16(对于pcap记录头的大小)时递增它。然后,每当我想读取一个单独的数据包时,我就可以使用常规方法加载它并寻求pcap_next_ex
。
使用libpcap有更好的方法吗?
答案 0 :(得分:0)
自己解决了这个问题。
在致电pcap_next_ex
之前,我将ftell(pcap_file(myPcap))
推送到vector<unsigned long>
。我根据需要手动解析数据包。
EZPZ。它只需要24小时以上的大脑残疾......