3、 L3层自定义协议截包法
又是非常优雅的做法,通过dev_add_pack注册packet_type结构,挂接上自定义协议的收发流程,就算Linux升级到3.0 4.0,估计也能轻易的移植。
可惜该方法只能拦截接收的报文,而且只能拦截该协议的报文,多用于正规协议开发,不适用于一些小功能实现。
4、 L3层netfilter截包法
netfilter是linux内核自带的正规防火墙,转一个netfilter钩子分布图:
可以发现,netfilter钩子虽然不多,但是遍布协议栈的各个关键路径,通过这些钩子就可以基本实现二层以上报文的过滤和删改。
5、 应用层raw socket截包法
原始套接字也是常用的截包方法,可惜功能有限。内核处理的所有其它类型的数据包都会传一个拷贝给匹配的原始套接字,但是方便监听的同时是修改上的无力,因为得到的数据仅仅是个拷贝。而原始套接字对于其他线程发送的报文更是无能为力。