1、Wireshark 介绍
Wireshark windows 抓包效果图示 我们大学阶段上网络课用过,公司阶段如果涉及网络协议开发也会大量用到 Wireshark。 那么,问题来了,能否对 Wireshark 抓包数据进行可视化分析呢? 这引起我极大的好奇和探索欲望,今天带领大家一探究竟。 2、Wireshark 数据可视化可行性与需求分析主要探讨如下几个问题? 2.1 数据从哪里来?数据通信(比如:登录 QQ、微信,浏览网页等)都需要大量的数据传输和同步。 从协议层面分为:网络接口层、网络层、传输层、应用层,每一层都有大量的数据。 所以,数据不是问题,数据量也不是问题。 数据量的大小只取决于时间问题。 2.2 数据如何获取?windows 下的 Wireshark 是可视化查看和分析工具,无法支撑我们获取数据二次处理和分析。 但,Wireshark 后台提供了命令行工具——tshark。 有了tshark 数据获取就“水到渠成”了。 2.3 可视化分析架构如何选型?“当有了锤子之后,看什么都是钉子”。 我使用 Elastic Stack 比较多,所以天然的依然选型 ELK 。 但,可视化远不止 kibana,比如基于 kibana 的 grafana 也是不错的选择。
3、Wireshark 数据可视化架构总览来自 Elastic 官方博客 各大组件各司其责,共同完成数据的采集、同步、落地存储和可视乎工作。
本文全部实现均基于 ELK 8.X 版本,tshark 使用最新的 4.0.2 版本(2022-12-15最新)。 4、Wireshark 抓包数据采集前文分析了tshark 工具的妙处。tshark 新版本更为精妙的提供了支持 ES 数据 bulk 批量导入的格式,如下图所示。 tshark 核心参数含义:
数据源也就是抓包的数据对象来自我的宿主机:windows 机器。 tshark windows 下获取网络口的方式:
当然这里最快捷的方式就是 tshark 在 windows 机器抓包后写入 json 文件,并借助 logstash 同步 到 Elasticsearch。 但,由于一些特殊原因(版本不兼容等),我通过 synching “曲线救国” 先实现 json 同步,而后借助 logstash 实现 json 数据写入。 跨平台文件同步示意图 tshark 使用参见:https://www.wireshark.org/docs/man-pages/tshark.html 5、Wireshark 数据建模tshark 抓包简单易用, 但数据字段有数百个。 唯有合理的建模,才能实现准确、高效数据分析和可视化。所以,这一步不能省且很重要。 tshark 提供了指定协议类型并输出 mapping 的功能。这其实为困惑我们的建模拨开了疑云。
但,不见得所有字段都是我们想要的。需要结合后面的可视化分析往前追溯建模的合理性。 我们对于核心的几个字段做了建模处理,其他字段忽略,使用了 dynamic:false 特性,数据不被索引和检索,但可以展示。一方面保全的数据的完整性,另一方面极大的方便了建模。 我只对如下几个核心字段建模处理了: 字段类型含义geoipgeo_point经纬度,地图打点用sourceip源IP地址destinationip目标ip地址protocolkeyword协议infotext数据信息,用处不大layers.frame.frame_frame_lenlong帧长度layers.frame.frame_frame_protocolskeyword链路层协议layers.ip.ip_ip_srcip源iplayers.ip.ip_ip_dstip目的iplayers.udp.udp_udp_srcportinteger源端口layers.udp.udp_udp_dstprotinteger目标端口 6、Wireshark 数据预处理全部导入未经预处理的数据如下所示。 未经预处理的数据截图 所以数据在写入之前要做一下预处理。
第一,第二等可以借助 logstash 同步中转的 filter 环节实现。 这里强调一下,地图打点需要经纬度信息,咱们的所有数据里面最多到 ip 地址。 这里,需要我们做一下转换,将IP地址转换为经纬度。这一步,Elasticsearch 已经通过 GeoIp processor 集成。 GeoIp processor 根据来自 Maxmind 数据库的数据添加有关 IP 地址地理位置的信息。 默认情况下,GeoIp processor 将此信息添加到 geoip 字段下。GeoIp processor 可以解析 IPv4 和 IPv6 地址。 更多 Maxmind 数据库信息参见: https://dev.maxmind.com/geoip/geoip2/geolite2/ 实现如下:
7、Wireshark 数据写入/数据同步写入数据的方式如前所述,可以分为三种: ![]()
优先推荐:Logstash,因为 Logstash 的"三段论":input、filter、output 更加灵活,插件丰富(绝大多数都已内部集成),支持中间环节的数据处理。 |