改写的网络数据包在飞行中使用libnetfilter_queue
-
28-09-2019 - |
题
我尝试写一个用户应用程序,可以勾到一个操作系统的网络叠,嗅包飞过去和编辑的,其感兴趣。
经过大量的谷歌搜索,在我看来最简单(但合理稳健)方法这样做的(对任何平台)是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, …)
?
不隶属于 StackOverflow