![如何获取内核数据包过滤器排队的数据包?](https://linux22.com/image/87548/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E5%86%85%E6%A0%B8%E6%95%B0%E6%8D%AE%E5%8C%85%E8%BF%87%E6%BB%A4%E5%99%A8%E6%8E%92%E9%98%9F%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85%EF%BC%9F.png)
我制作了简单的 HTTP 代理,它接受来自固定端口上的客户端的连接;代理为每个传入连接进行分叉,分叉的进程处理流向 Internet 和来自 Internet 的数据包流;实现了一个简单的QOS,数据包根据优先级(最小、中、最大)存储在三个不同的队列中,然后按优先级顺序发送。
到目前为止一切顺利,但我的代理并不完全在它应该在的地方:代理在我的笔记本电脑上,而应该连接到代理的客户端只是我的笔记本电脑:所以代理正在工作,但这不是一个真实案例(我不想在本地计算机上使用代理,我希望它在它的“外部”)。
现在测试阶段已经结束,我想将我的代理迁移到外部实体上,(我猜)它应该是:例如,我的 Raspberry Pi 2但在告诉我迁移这个问题之前,请先听听我的问题。我阅读了 Raspberry Stack Exchange 中的问题,它们都是关于传感器、如何将 Pi 连接到显示器或有关蓝牙的问题。
我的问题是关于底层操作系统 Raspbian 中的库,Raspbian 是一个经过优化的 Debian 衍生操作系统,所以我认为这个 Stack Exchange 是合适的地方。
我尝试了第一种方法libnetfilter_queue
(总是在我的笔记本电脑上使用代理)并使用标志iptables
,,NFQUEUE
我有我的数据包队列(将它们复制到我的队列中,DROP
并在时间到时再次发送它们)原始套接字):但我的 RPi 可能是多接口的(它可能最多插入四个 Wi-Fi 适配器,因为它是一个接入点,加上连接到我的调制解调器的以太网电缆),我的主管说libnetfilter_queue
不适合我的目的,因为它不能处理多个接口,并且很难选择使用哪个接口来发送数据包。
总之:我的笔记本电脑上有一个代理,我想将其迁移到我的 RPi 中(因此,除了作为接入点之外,它还应该提供 QOS),但我不知道如何重定向数据包我的代理的一个wlan0
接口(或全部四个),旨在侦听传递给程序的端口main
。
libnetfilter_queue
(显然)不是一个选项,那么我可以使用什么库/API?
这是我论文的一部分,所以我更喜欢使用库和/或 API 来与我的代码集成,而不是使用现有的程序。
感谢您的帮助。