首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在libnids的样本中从来没有调用过tcp_callback。

在libnids的样本中从来没有调用过tcp_callback。
EN

Stack Overflow用户
提问于 2014-12-03 17:08:25
回答 1查看 617关注 0票数 3

我正在从pcap中提取http数据。我必须重新组装碎片,所以我找到了尼德·利布。我在Mac 10.9.5 64位中安装了带有自制的libnids 1.24。

我试着运行打印样品。我修改了一些代码以适应我的环境,例如将"nids.h“更改为,添加nids_params.filename = filename;打开脱机文件进行分析。

样品可以开始了。但问题是它什么也不印。

我将打印添加到tcp_callback函数的第一行。再说一遍,什么都没有。指示从未调用回调的。

为了证明这个问题与我的帽子文件无关

  • 我把它设置为捕捉实时数据包。在我打开网页后,我什么也得不到。
  • 我自己用libpcap解析pcap,得到大量的tcp数据包。
  • 数据包的数量是70k+。这是不可能没有一个完整的tcp连接与握手。

用示例编译libnids并一步一步地调试是非常痛苦的。那么你能给我一些关于为什么不调用回调的信息吗?

EN

回答 1

Stack Overflow用户

发布于 2014-12-05 08:05:27

因为没有人回答我:(我必须选择最痛苦的方式:编译libnids,然后一步一步地调试,看看wtf正在进行中。

我尝试关闭-O2编译选项。

并查看应该在何处调用tcp回调。我发现有两个事实:

  • 某些数据包的校验和错误。
  • 它只是找到一个tcp流并添加一个新的连接,因为ACK没有被看到。

第一个是由wireshark验证的。我看到wireshark向我证明了tcp checksum offload。我从wireshark的wiki那里得到了解释:

大多数现代操作系统支持某种形式的网络卸载,其中一些网络处理发生在NIC上,而不是CPU上。通常这是件很棒的事。它可以释放系统其余部分的资源,并让它处理更多的连接。如果您试图捕获流量,它可能会导致错误和奇怪甚至丢失的流量。在支持校验和卸载、IP、TCP和UDP校验和的系统上,校验和卸载在NIC上计算,然后在有线传输。在Wireshark中,这些显示为带有红色文本标记为黑色的传出数据包,并且注释不正确,应该是xxxx (可能是由"TCP校验和卸载“引起的)。

第二个原因是libnids能够通过握手消息重新组装流。

突然间,我突然想到,把这两个事实结合在一起,结果就没有结果了。

,因为大多数ACK的数据包都有错误的校验和。,所以在重新组装函数可以看到数据包之前跳过它。

禁用校验和后,我最终得到tcp有效负载的输出。两天后我就拿到了!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27277580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档