Linux网络截包不完全整理(4)

L1层驱动截包法

优点:因为暴力所以方便,不需要对linux内核有很深入地了解,过滤输出的报文很简单。

缺点:与设备相关,扩展性差,对接收到的报文要做很复杂的修改相对麻烦。

适用:开发周期短,功能相对简单,不需要对接收报文做三层以上复杂过滤的情况。

L2层虚拟设备截包法

优点:与具体设备和协议无关,扩展性好,高效,通过修改路由也可以有很多更多功能的应用。

缺点:只能截获发出的报文,要结合路由使用。

适用:需要考虑扩展性或者多网卡支持的情况,或者基于路由的一些特殊应用。

L3层自定义协议截包法

优点:通过协议头来过滤报文,可读性和扩展性好。

缺点:因为优雅所以麻烦,只能截获接收的报文。

适用:有专用协议头的情况。

L3层netfilter截包法

优点:netfilter框架严密,钩子点很有代表性,易扩展,易维护,很容易作为一个单独的可加载模块来开发,方便调试。

缺点:修改3层以下的报文相对困难。

适用:不需要修改3层以下报文头的情况,应该是用途广的截包方法了。

应用层raw socket截包法

优点:在用户态运行就可以方便的监听想要的各种报文。

缺点:无力删改报文,无力截获其他线程发送的报文。

适用:只监听不修改的情况。

应用层pcap软件包截包法

优点:开发简单,而且libpcap库能大大简化对报文的分析工作。

缺点:需要libpcap库支持,无力删改报文,无力截获其他线程发送的报文。

适用:只监听不修改的情况。

当然,网络截包还有一个很重要的考虑因素就是性能,对于接收报文的拦截来说,偏底层的截包法效率较高,而对于发送报文的拦截,偏上层的截包法效率更高。

佛说,没有最好的,只有最合适的,所以做网络报文截取的时候要综合考虑实际需求,采用最合适的方法,就能事半功倍。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpgfg.html