我正在尝试编写一个用户空间应用程序,它可以连接到操作系统的网络堆栈,嗅探飞过的数据包并编辑它感兴趣的数据包。
经过多次谷歌搜索,在我看来,最简单(但相当健壮)的方法(在任何平台上)是 Linux 的libnetfilter_queue
项目。但是,除了有限的官方文档之外,我很难找到该项目的任何合理文档。它的主要特点(如第一个链接所述)
- 从内核 nfnetlink_queue 子系统接收排队的数据包
- 向内核 nfnetlink_queue 子系统发布判决和/或重新注入更改的数据包
重点是我自己的。我到底是什么意思?我试过修改提供的示例代码,但也许我误解了一些东西。代码在NFQNL_COPY_PACKET
模式下运行,所以我收到了整个数据包——但我对它的修改似乎仅限于我自己的应用程序——正如人们所期望的那样,考虑到“复制”语义。
我的感觉是我注定要以NF_QUEUE
某种方式利用它,但我还没有完全理解它。任何指针?
(如果有更简单的机制可以做到这一点,它也是跨平台的,我很想听听!)