前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带你一起用 ElasticStack 搞定 Wireshark 抓包数据可视化

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

作者头像
铭毅天下
发布2022-12-22 20:27:01
2.6K1
发布2022-12-22 20:27:01
举报
文章被收录于专栏:铭毅天下铭毅天下

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 下获取网络口的方式:

代码语言:javascript
复制
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 的功能。这其实为困惑我们的建模拨开了疑云。

代码语言:javascript
复制
tshark -G elastic-mapping --elastic-mapping-filter ip,udp,http,tcp

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

我们对于核心的几个字段做了建模处理,其他字段忽略,使用了 dynamic:false 特性,数据不被索引和检索,但可以展示。一方面保全的数据的完整性,另一方面极大的方便了建模。

我只对如下几个核心字段建模处理了:

字段

类型

含义

geoip

geo_point

经纬度,地图打点用

source

ip

源IP地址

destination

ip

目标ip地址

protocol

keyword

协议

info

text

数据信息,用处不大

layers.frame.frame_frame_len

long

帧长度

layers.frame.frame_frame_protocols

keyword

链路层协议

layers.ip.ip_ip_src

ip

源ip

layers.ip.ip_ip_dst

ip

目的ip

layers.udp.udp_udp_srcport

integer

源端口

layers.udp.udp_udp_dstprot

integer

目标端口

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/

实现如下:

代码语言:javascript
复制
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 命令行使用方式如下:

代码语言:javascript
复制
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 中修改且重启后才生效。
代码语言:javascript
复制
http.max_content_length: 500mb

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

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

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

代码语言:javascript
复制
split -l 20000 packets.json 

8、Wireshark 数据可视化

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

9、小结

  • 大数据就在身边,wireshark 抓一周数据基本磁盘就能爆掉。
  • 中间踩了很多坑,走了不少弯路。比如:tshark 版本问题,tshark 包格式不足以同步问题,数据实时同步工具选型问题,数据精简建模问题等。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Wireshark 介绍
  • 2、Wireshark 数据可视化可行性与需求分析
    • 2.1 数据从哪里来?
      • 2.2 数据如何获取?
        • 2.3 可视化分析架构如何选型?
        • 3、Wireshark 数据可视化架构总览
        • 4、Wireshark 抓包数据采集
        • 5、Wireshark 数据建模
        • 6、Wireshark 数据预处理
        • 7、Wireshark 数据写入/数据同步
        • 8、Wireshark 数据可视化
        • 9、小结
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档