我尝试写一个用户应用程序,可以勾到一个操作系统的网络叠,嗅包飞过去和编辑的,其感兴趣。

经过大量的谷歌搜索,在我看来最简单(但合理稳健)方法这样做的(对任何平台)是Linux的 libnetfilter_queue 的项目。然而,我无法找到任何合理文件项目时,外部的限制 官方的 文件。其主要特点(如通过第一链路)

  • 接收排队分组从核nfnetlink_queue子系统
  • 发出判决和/或 reinjecting更改的数据包 内核nfnetlink_queue子系统

重点是我自己的。怎么我到底意味着这?我已经试过了修改 样本 代码提供的,但也许我误解的东西。代码是在工作 NFQNL_COPY_PACKET 模式,因此我 接受整个包-但我的修改,这似乎仅限于我自己的应用程序--正如人们所期望的那样,鉴于在"复制"的语义。

我的感觉是,我的意思使用 NF_QUEUE 不知何故,但我没有相当grokked。任何指点?

(如果有一个更简单的机制这样做,这也是交叉平台,我喜欢听到它!)

有帮助吗?

解决方案

我不能相信,我错过了这个以前。如沉默,因为我以后的问题因此,我认为我永远不会的工作,这一个我自己。:)

我没有看起来的功能原型正常。事实证明的"判决"功能(以下概述的),

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 该分组,并通过适当改组后的核心。

其他提示

只是一个疯狂的猜测从周围挖源代码:尽量明确加错位使用有效载荷 nfnl_addattr_l(…, NFQA_PAYLOAD, …)?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top