gpt4 book ai didi

networking - 使用 libnetfilter_queue 即时重写网络数据包

转载 作者:行者123 更新时间:2023-12-04 13:44:19 24 4
gpt4 key购买 nike

我正在尝试编写一个用户空间应用程序,它可以连接到操作系统的网络堆栈,嗅探飞过的数据包并编辑它感兴趣的数据包。

经过多次谷歌搜索,在我看来,最简单(但相当健壮)的方法(在任何平台上)是 Linux 的 libnetfilter_queue 。项目。但是,除了有限的 official 之外,我无法为该项目找到任何合理的文档。文档。它的主要特点(如第一个链接所述)

  • 从内核 nfnetlink_queue 子系统接收排队的数据包
  • 发布判决和/或重新注入(inject)更改的数据包 到内核​​ nfnetlink_queue 子系统

  • 重点是我自己的。我到底是什么意思?我试过修改 sample提供的代码,但也许我误解了一些东西。代码在 NFQNL_COPY_PACKET 中运行模式,所以我收到了整个数据包——但我对它的修改似乎仅限于我自己的应用程序——正如人们所期望的那样,考虑到“复制”语义。

    我的感觉是我注定要使用 NF_QUEUE不知何故,但我还没有完全理解它。任何指针?

    (如果有更简单的机制可以做到这一点,它也是跨平台的,我很想听听!)

    最佳答案

    我不敢相信我以前错过了这个。尽管我不愿在 SO 上发布问题,但我认为我自己永远不会解决这个问题。 :)

    我没有正确查看函数原型(prototype)。事实证明,在“判决”功能(如下所述)中,

    int nfq_set_verdict(struct nfq_q_handle *qh,
    u_int32_t id,
    u_int32_t verdict,
    u_int32_t data_len,
    const unsigned char *buf
    )

    最后两个参数用于将数据返回到网络堆栈。事后看来很明显,但我完全错过了 print_pkt函数不将数据包数据作为参数,而是从 struct nfq_data中提取.

    关键是 NF_ACCEPT数据包并将适当修改的数据包传递回内核。

    关于networking - 使用 libnetfilter_queue 即时重写网络数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4283043/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com