业务开发中需要嗅探流量进行分析的一些方案
Posted NetWhite
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了业务开发中需要嗅探流量进行分析的一些方案相关的知识,希望对你有一定的参考价值。
背景
在日常开发中,我们平常主要通过日志来记录操作行为。但是有些特殊场景,比如目标系统不是自己开发的或者是第三方系统等,无法直接通过侵入代码,埋点等方式直接记录操作日志。
这个时候,我们可以退而求其次,捕获网络请求,对请求的请求体反序列化,获得请求数据。这种方案对于http协议比较好处理,下面提供一些方案,仅供参考。
流量嗅探工具
jNetPcap
jNetPcap是对libcap或WinPcap的java封装,可以绑定主机的网络驱动设备进行流量捕获。关于它的使用,我以前写过几篇博客:
java使用jNetPcap嗅探网络包之windows下配置使用
java使用jNetPcap嗅探网络包在linux下配置的一些问题
因为在上面的两篇博文中,示例写的已经很清晰了,所以不在这里赘述。
我进行过相关功能性地验证,该库对于流量捕获及分析,目前看来支持比较完备(从应用层到数据链路层),API的使用上感觉一般,不算是特别友好。对于常规http协议请求的解析处理来说基本足够,特定需求可能需要看情况进行处理。虽然该库在传输层及以上,只提供了tcp、http等协议的默认工具类解析,但是其它应用层协议(比如ftp等)都可以遵守协议规范,自行编码解析处理。
说下该方案的优缺点:
基于java语言提供的轻量级库,可以在应用层面根据实际需求进行封装开发。同时可以规避使用第三方重量级中间件的难以扩展性、复杂性,及相关组件存在不常用功能导致的性能损耗。
业务实现受开发人员控制,若是存在一定的性能问题,可以在编码层面进行合理设计解决。
对于该库的稳定性,并未进行过实际场景验证;它的实际性能也未进行过实际压测。它的缺点在于协议的场景限制,对于一些加密协议,比如https,解决方案就不只是通过简单的开发就能满足了。
packetbeat
packetbeat,一款轻量型网络数据采集器,是elasticsearch栈的一个组件。
关于这个的验证步骤,直接看这里:使用packetbeat进行流量分析的基本步骤记录,详细的就不再本文赘述。
说下这个的优缺点:
流量的捕获、统计功能基本都具备。对于默认支持的协议来说,基本能力都已具备,工具自动捕获并发送到es,不用开发人员进行额外的开发工作,但是支持的协议有限,如需对协议处理,需要开发人员进行开发扩展。毕竟是elasticsearch的套件,可以只进行相关配置便与es、kibana等无缝衔接,以达到快速接入。
流量嗅探位置
网络包都是通过网络驱动设备(网卡)投递出去的,所以网络流量捕获是对绑定的网卡进行流量嗅探,因此流量也必须要流经绑定的网卡且没有被网卡丢弃。
一般情况下,我们可能会把嗅探工具安装到目标应用所在服务器上,比如下面这样:
如果不想对目标主机进行侵入操作,或者担心性能损耗,资源占用等情况,也可以考虑通过镜像流量在第三方主机上捕获流量进行分析,如下:
结语
以上方案只是提供一些选择,还有其它更好的解决方案,至于采用哪种,还是要取决于自己业务场景或实际情况来进行考量选择。
以上是关于业务开发中需要嗅探流量进行分析的一些方案的主要内容,如果未能解决你的问题,请参考以下文章