带你一起用 ElasticStack 搞定 Wireshark 抓包数据可视化

Posted 铭毅天下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你一起用 ElasticStack 搞定 Wireshark 抓包数据可视化相关的知识,希望对你有一定的参考价值。

1、Wireshark 介绍

  • Wireshark 是一个功能十分强大的开源的网络数据包分析器,可实时从网络接口捕获数据包中的数据。它尽可能详细地显示捕获的数据以供用户检查它们的内容,并支持多协议的网络数据包解析。

  • Wireshark 适用于 WindowsUNIX 操作系统。它可被用于检查安全问题和解决网络问题,也可供开发者调试协议的实现和学习网络协议的原理。

Wireshark windows 抓包效果图示

我们大学阶段上网络课用过,公司阶段如果涉及网络协议开发也会大量用到 Wireshark。

那么,问题来了,能否对 Wireshark 抓包数据进行可视化分析呢?

这引起我极大的好奇和探索欲望,今天带领大家一探究竟。

2、Wireshark 数据可视化可行性与需求分析

主要探讨如下几个问题?

2.1 数据从哪里来?

数据通信(比如:登录 QQ、微信,浏览网页等)都需要大量的数据传输和同步。

从协议层面分为:网络接口层、网络层、传输层、应用层,每一层都有大量的数据。

所以,数据不是问题,数据量也不是问题。

数据量的大小只取决于时间问题。

2.2 数据如何获取?

windows 下的 Wireshark 是可视化查看和分析工具,无法支撑我们获取数据二次处理和分析。

但,Wireshark 后台提供了命令行工具——tshark

有了tshark 数据获取就“水到渠成”了。

2.3 可视化分析架构如何选型?

“当有了锤子之后,看什么都是钉子”。

我使用 Elastic Stack 比较多,所以天然的依然选型 ELK

但,可视化远不止 kibana,比如基于 kibanagrafana 也是不错的选择。

  • 数据落地存储选型:Elasticsearch。

  • 数据可视化分析选型:Kibana。

  • 数据同步不止一种方案:curl + bulk 批量写入、Logstash、Filebeat 都是可选的方案。

3、Wireshark 数据可视化架构总览

来自 Elastic 官方博客

各大组件各司其责,共同完成数据的采集、同步、落地存储和可视乎工作。

  • Wiresharktshark 工具负责网络协议包数据的采集,存储为后缀名为:.pcap 和 json 的文件。

  • FilebeatLogstashcurl 实现文件数据的同步。值得一提的是:仅 logstash 能实现中间环节的预处理,借助自带的 filter 插件实现。

  • Elasticsearch 实现数据存储,数据以 json 文档形式存储到 ES。

  • Kibana 实现数据可视化。

本文全部实现均基于 ELK 8.X 版本,tshark 使用最新的 4.0.2 版本(2022-12-15最新)。

4、Wireshark 抓包数据采集

前文分析了tshark 工具的妙处。tshark 新版本更为精妙的提供了支持 ES 数据 bulk 批量导入的格式,如下图所示。

tshark 核心参数含义:

  • -i:指定网口,linux 下常见的 eth0,windows需要查看获取。

  • -T:指定包格式,ek 代表 bulk 批量写入 Elasticsearch 的格式。

  • -j:协议类型,如:"http tcp ip" 分别代表不同的协议类型。

  • -P、-V:如果 -P 选项与 -V 或 -O 选项一起使用,则摘要行将与详细信息行一起显示。

  • -x:打印数据包数据的十六进制形式。

数据源也就是抓包的数据对象来自我的宿主机:windows 机器。

tshark windows 下获取网络口的方式:

tshark.exe -D

当然这里最快捷的方式就是 tshark 在 windows 机器抓包后写入 json 文件,并借助 logstash 同步 到 Elasticsearch。

但,由于一些特殊原因(版本不兼容等),我通过 synching “曲线救国” 先实现 json 同步,而后借助 logstash 实现 json 数据写入。

跨平台文件同步示意图

tshark 使用参见:https://www.wireshark.org/docs/man-pages/tshark.html

5、Wireshark 数据建模

tshark 抓包简单易用, 但数据字段有数百个。

唯有合理的建模,才能实现准确、高效数据分析和可视化。所以,这一步不能省且很重要。

tshark 提供了指定协议类型并输出 mapping 的功能。这其实为困惑我们的建模拨开了疑云。

tshark -G elastic-mapping --elastic-mapping-filter ip,udp,http,tcp

但,不见得所有字段都是我们想要的。需要结合后面的可视化分析往前追溯建模的合理性。

我们对于核心的几个字段做了建模处理,其他字段忽略,使用了 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源ip
layers.ip.ip_ip_dstip目的ip
layers.udp.udp_udp_srcportinteger源端口
layers.udp.udp_udp_dstprotinteger目标端口

6、Wireshark 数据预处理

全部导入未经预处理的数据如下所示。

未经预处理的数据截图

所以数据在写入之前要做一下预处理。

  • 第一,把 json 数据打散。

  • 第二,删除不必要的字段。

  • 第三,增加必要的字段,后续要有地图打点,可以借助 ingest process 实现。

第一,第二等可以借助 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/

实现如下:

PUT _ingest/pipeline/geoip_pipeline

  "description" : "Add geoip info",
  "processors" : [
    
      "geoip" : 
        "field" : "destination",
        "ignore_missing": true
      
    
  ]

7、Wireshark 数据写入/数据同步

写入数据的方式如前所述,可以分为三种:

  • 第一:借助 Filebeat 同步 json 文件。

  • 第二:借助 Logstash 同步。

  • 第三:借助 curl 命令行同步写入。

优先推荐:Logstash,因为 Logstash 的"三段论":input、filter、output 更加灵活,插件丰富(绝大多数都已内部集成),支持中间环节的数据处理。

同步完毕后,Elasticsearch 端查看到的数据格式如下。

curl 命令行使用方式如下:

curl -H "Content-Type:application/json" --cacert  /elasticsearch-8.1.0/config/certs/http_ca.crt  -u elastic:changeme -XPOST "https://111.121.0.114:9200/packets-webserver01-2022-12-14/_bulk" --data-binary "@packes.json"

curl 可能存在的问题,大文件搞不定的问题。制约因素在于 http 请求限制。

解决方案有二:

  • 其一,增大 max_content_length 值(默认值:100mb,这里mb实际是MB意思)。属于静态值,只能在 elasticsearch.yml 中修改且重启后才生效。

http.max_content_length: 500mb

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html

  • 其二:大文件切割为多个小文件。

举例,linux 环境下将 packets.json 切分为以 20000 行为单位的多个小文件。

split -l 20000 packets.json

8、Wireshark 数据可视化

有了前面的工作,这一步就仅剩工作量了。实战效果如下:

9、小结

  • 大数据就在身边,wireshark 抓一周数据基本磁盘就能爆掉。

  • 中间踩了很多坑,走了不少弯路。比如:tshark 版本问题,tshark 包格式不足以同步问题,数据实时同步工具选型问题,数据精简建模问题等。

文章篇幅有限,找个时间跟大家直播讲解一下。

10、直播

2022-12-22 周四 20:30—22:30 扫码一起学

以上是关于带你一起用 ElasticStack 搞定 Wireshark 抓包数据可视化的主要内容,如果未能解决你的问题,请参考以下文章

带你一起用 ElasticStack 搞定 Wireshark 抓包数据可视化

清华毕业生用13天时间带你搞定Python爬虫分布式

一文带你搞定 3 大消息中间件!

带你十天轻松搞定 Go 微服务系列(九链路追踪)

17个案例带你3分钟搞定Linux正则表达式

带你十天轻松搞定 Go 微服务系列