我正在从pcap中提取http数据。我必须重新组装碎片,所以我找到了尼德·利布。我在Mac 10.9.5 64位中安装了带有自制的libnids 1.24。
我试着运行打印样品。我修改了一些代码以适应我的环境,例如将"nids.h“更改为,添加nids_params.filename = filename;打开脱机文件进行分析。
样品可以开始了。但问题是它什么也不印。
我将打印添加到tcp_callback函数的第一行。再说一遍,什么都没有。指示从未调用回调的。
为了证明这个问题与我的帽子文件无关
用示例编译libnids并一步一步地调试是非常痛苦的。那么你能给我一些关于为什么不调用回调的信息吗?
发布于 2014-12-05 08:05:27
因为没有人回答我:(我必须选择最痛苦的方式:编译libnids,然后一步一步地调试,看看wtf正在进行中。
我尝试关闭-O2编译选项。
并查看应该在何处调用tcp回调。我发现有两个事实:
第一个是由wireshark验证的。我看到wireshark向我证明了tcp checksum offload。我从wireshark的wiki那里得到了解释:
大多数现代操作系统支持某种形式的网络卸载,其中一些网络处理发生在NIC上,而不是CPU上。通常这是件很棒的事。它可以释放系统其余部分的资源,并让它处理更多的连接。如果您试图捕获流量,它可能会导致错误和奇怪甚至丢失的流量。在支持校验和卸载、IP、TCP和UDP校验和的系统上,校验和卸载在NIC上计算,然后在有线传输。在Wireshark中,这些显示为带有红色文本标记为黑色的传出数据包,并且注释不正确,应该是xxxx (可能是由"TCP校验和卸载“引起的)。
第二个原因是libnids能够通过握手消息重新组装流。
突然间,我突然想到,把这两个事实结合在一起,结果就没有结果了。
,因为大多数ACK的数据包都有错误的校验和。,所以在重新组装函数可以看到数据包之前跳过它。
禁用校验和后,我最终得到tcp有效负载的输出。两天后我就拿到了!
https://stackoverflow.com/questions/27277580
复制相似问题