【问题标题】:Receiving TCP segments bigger than MTU with libpcap使用 libpcap 接收大于 MTU 的 TCP 段
【发布时间】:2015-08-08 21:09:35
【问题描述】:

各位网络冒险家们好,

我正在实施网络攻击,ARP 欺骗网关和受害者,过滤 HTTP 数据并在我的浏览器中重组网页。也称为 webspy。

但是,我在使用 libpcap 时遇到了一些问题。当我收到包含 HTTP 数据的 TCP 段的数据包时,其中一些比 MTU 大!比如 1922、2878 甚至 4909 字节。

起初,我认为这些是内核提供的重组 HTTP 数据包。但是,根据with this post,libpcap 不会重新组装数据包,因此它不会为我带来一个完整的、格式良好的数据包,其中包含来自给定请求的所有 HTTP 响应。

为了测试,我打印了所有这些大于 MTU 的数据包。所有这些都包含普通数据(CSS、JS、HTML、图像……)。

那么到底发生了什么?这些大人物是什么?我为此苦苦挣扎了几天。

奖励问题:我真的需要自己重新组装所有这些 HTTP 数据吗?

【问题讨论】:

    标签: http tcp libpcap mtu


    【解决方案1】:

    但是,我在使用 libpcap 时遇到了一些问题。当我收到包含 HTTP 数据的 TCP 段的数据包时,其中一些比 MTU 大!比如 1922、2878 甚至 4909 字节。

    您的网络适配器可能充当TCP offload engine,重新组装多个传入的 TCP 段并将一个重新组装的段交给主机。至少在 Linux 上,网络堆栈可能正在执行Large Receive Offload,如果在将数据包交给“tap”(Linux 上的 libpcap 使用的 PF_PACKET 套接字)之前完成,您将获得重新组装的段。

    对于您的程序,这应该不是问题,因为...

    我真的需要自己重新组装所有这些 HTTP 数据吗?

    ...您需要重新组装 HTTP 请求的所有组件或自己回复。

    【讨论】:

    • 明白!可以肯定的是,这对于重组任务来说不是问题。但这是中继任务的问题(来自 ARP 欺骗)。由于数据包比 MTU 大,我将无法使用 libnet 发送,因为它会报告错误。所以,在那种情况下,我必须再次将 TCP 分段,对吗?或者有没有更简单的方法来处理大数据包?
    • “那么,在这种情况下,我必须再次将 TCP 分段,对吗?”正确。
    • 如果可能,另一种方法是关闭所有卸载。您这样做的方式将取决于操作系统,也可能取决于驱动程序。
    • “如果可能,另一种方法是关闭所有卸载。您这样做的方式将取决于操作系统,也可能取决于驱动程序。”我想,对于一个工具来说,这不是一个聪明的决定。好吧,我想我会自己处理碎片。有什么推荐的库吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多