下一页 上一页 目录

4. 简介

有没有想过您可以拦截在您的主机 IP 协议栈中向上或向下传输的数据包?我说的不是像原始套接字或 libpcap (tcpdump) 那样的监听。我的意思是真正地阻止数据包进一步通过 IP 协议栈传播,然后(可能在进行一些更改后)将其重新注入? 好了,做梦的时间结束了,因为 Linux 的分流套接字已经来了!

分流套接字正是做到这一点 - 它们根据防火墙规则过滤掉某些数据包,并将它们带到您的用户空间。 然后,您可以自由地选择将它们重新注入,就好像什么都没发生一样,或者先修改它们然后再重新注入,或者根本不重新注入它们。

顾名思义,这种机制利用了一种特殊的原始套接字类型,称为 divert (IPPROTO_DIVERT),它允许您像使用常规套接字一样在其上接收发送。 不同之处在于,分流套接字绑定到一个端口,防火墙可以被指示将某些数据包发送到该端口。 任何能被防火墙过滤的东西都可以被发送到分流套接字中。

分流套接字最初作为 FreeBSD 的一部分出现。 Linux 下的分流套接字是该机制的移植,力求在使用它的用户空间程序方面实现源代码兼容。


下一页 上一页 目录