【问题标题】:packet data intercept and modification分组数据截取和修改
【发布时间】:2012-05-05 14:09:36
【问题描述】:

我希望能够在 tcp 客户端一侧拦截/修改 tcp 流中的数据。 pcap 的示例显示了如何解析 tcp 数据包标头/有效负载。 但是假设,我想在 tcp 客户端读取数据包之前修改数据包有效负载,或者完全丢弃数据包。如何使用 pcap capure 做到这一点?

【问题讨论】:

    标签: pcap libpcap


    【解决方案1】:

    使用 libpcap 或 WinPcap 无法做到这一点; libpcap 构建在不支持的操作系统机制之上(这些机制的存在是为了支持被动数据包捕获和低级数据包捕获和注入,不支持数据包输入和输出路径中的数据包修改),WinPcap 的驱动程序构建在一个那种操作系统机制。

    您必须在您使用的任何操作系统中找到某种机制,以支持窃听网络堆栈的方式,允许窃听程序在数据包通过网络堆栈时对其进行修改。这种机制在某些操作系统上可能不存在;在确实存在的操作系统上,如果有的话,它可能非常依赖于操作系统。 (libpcap 使用的机制也依赖于操作系统;libpcap 的存在部分是为了尽可能最大程度地隐藏应用程序的这些差异。)

    【讨论】:

    • 你必须找到某种机制,在你使用的任何操作系统中,它支持以允许窃听程序在数据包通过网络堆栈时修改数据包的方式进入网络堆栈。
    • 谢谢,不过我还是不太清楚。似乎很少有框架可以解决这个问题,比如“scapy”或“nemesis”......他们可以“制作”和“注入”数据包,虽然我找不到如何更改现有数据包的有效负载,或为现有连接注入 tcp 数据包。你认为“netfilter”会在 Linux/BSD 中提供这样的机制吗?
    • 你找不到,因为他们不支持;他们通过在网络上传输数据包来“注入”数据包,而不是在接收到的数据包到达 TCP 之前将其捕获并将修改后的数据包交给 TCP。 Netfilter 可能会让你在 Linux 上做你想做的事; ipfirewall 或 PF 可能会让你在 *BSD 上这样做。
    【解决方案2】:

    如上所述,您不能使用 pcap 进行拦截/修改。为此,您需要以下依赖于操作系统的技术之一:

    • Linux:libnetfilter_queue + iptables
    • MacOSFreeBSD:转接sockets + ipfw
    • Windows:WinPkFilter(商业)、WinDivert (LGPL),或编写您自己的 NDIS IM 或 WFP 调用驱动程序。

    (通常披露:WinDivert 是我的项目)。

    【讨论】:

      【解决方案3】:

      Scapy配合python使用是一个非常好的工具兼库。

      您可以通过命令行进行各种数据包监控和编辑

      您还可以在 scapy 之上构建应用程序来执行特定任务。

      Scapy

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-01
        • 2021-11-24
        相关资源
        最近更新 更多