tshark
是网络分析工具wireshark
下的一个工具,主要用于命令行环境进行抓包、分析,尤为对协议深层解析时,tcpdump
难以胜任的场景中。本系列文章将整理介绍tshark
相关内容。本文将介绍与tshark
相关的流量解决方案。git
tshark
+ elastic stack
利用tshark
,不只能够对现有的pcap文件进行分析,因为能够输出其余格式,也就能够结合ES的强大搜索能力,达到对数据报文进行记录、分析处理的能力,能够实现回溯分析,结合kibana可视化工具,甚至达到实时可视化监控。github
elastic stack
全家桶早期ELK套装中,logstash
性能一直被诟病,后来另起炉灶,针对采集使用golang
构建出一套beats,用于不一样的采集场景。其中针对网络流量,开发出packetbeat
。golang
packetbeat
的优点是定制了elasticsearch
的mapping
、kibana
一系列可视化图表,能够知足通常对tcp、dns、udp等常规报文的分析。基本达到开箱即用程度。json
但packetbeat
也有不足,对报文的分析采用会话分析,没有一个个报文单独分析,倾向于应用层,对网络层面分析不足(尤为是故障排查时),此外,支持的协议有限,仅常见协议与tshark
的2000多种存在明显差距,当遇到不支持时,须要等待支持或手动写插件,难度极高。segmentfault
tshark
支持将pcap报文分析后生成json文件导入elasticsearch
,同时支持elasticsearch
的批量导入接口_bulk
的格式,命令以下:网络
tshark -r test_trace.pcap -T ek > test_trace.pcap.json
以后能够将json文件经过curl
导入。并发
curl -s -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/foo/_bulk" --data-binary "@/Users/test-elastic/test_trace.pcap.json"
注:app
_bulk
接口对post的文件大小有限制,尽可能不要超过15MB,最好在10MB之内。若是超过,建议使用tshark
的输出条件生成多个json文件,使用curl
依次导入。curl
加-v
查看提示信息。packets-2019-04-23
(报文记录的日期),能够导入后从新索引可使用相似如下命令查看导入状况:curl
curl ' http://127.0.0.1:9200/packets-2019-04-23/_search/?size=10&pretty=true'
tshark
实时抓取报文,并启用过滤策略tshark
解析捕获的报文,提取指定的字段并写入csv文件中,或者使用json格式在下一步进行ETL
filebeat
持续检测csv文件,并发个logstash
用于字段过滤之类(如无需过滤能够跳过logstash
直接发给elasticsearch
)logstash
对字段进行过滤,格式转化等,以后发到elasticsearch
kibana
进行数据可视化,对报文统计分析tshark -i phy0.mon -t ad -t ad -lT fields -E separator=, -E quote=d -e _ws.col.Time -e wlan.fc.type -e wlan.fc.type_subtype -e radiotap.dbm_antsignal -e frame.len -e radiotap.datarate > tshark.csv
简单filebeat.yml配置文件elasticsearch
filebeat.modules: - module: system syslog: enabled: false auth: enabled: true var.paths: ["/home/tshark.csv"] name: test output.logstash: hosts: ["localhost:5044"]
logstash.yml文件,主要分为:
filebeat
的数据input { beats { port => 5044 } } csv { source => "message" columns => [ "col.time","frame.type","frame.subtype","rssi","frame.size","data.rate" ] } date { match => [ "col.time", "YYYY-MM-DD HH:mm:ss.SSSSSSSSS" ] target => "@timestamp" } mutate { add_field => {"[hour]" => "%{+HH}"} add_field => {"[minute]" => "%{+mm}"} add_field => {"[second]" => "%{+ss}"} } mutate { convert => [ "rssi", "integer" ] convert => [ "frame.size", "integer" ] convert => [ "data.rate", "integer" ] convert => [ "second", "integer" ] convert => [ "minute", "integer" ] convert => [ "hour", "integer" ] } if[frame.type]=="0"{ mutate { replace => [ "frame.type", "Management" ] }} if[frame.type]=="1"{ mutate { replace => [ "frame.type", "Control" ] }} if[frame.type]=="2"{ mutate { replace => [ "frame.type", "Data" ] }} output { elasticsearch { hosts => ["http://localhost:9200"] index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }
能够预先导入索引定义mapping
,这块能够查elasticsearch
文档
利用图表、面板等进行数据可视化,实现监控功能,这块可根据业务需求进行发挥~
使用tshak
的报文解析、数据导出功能,能够根据需求灵活处理,借助开源的大数据工具,能够实现更贴合业务的工具,实现快速对网络分析、实时监控、故障排查、高级检索、回溯分析、统计报表等,甚至在部分场景下能够替代商业的网络回溯分析系统。
参考:
系列文章: