tshark
是网络分析工具 wireshark
下的一个工具,主要用于命令行环境进行抓包、分析,尤其对协议深层解析时,tcpdump
难以胜任的场景中。本系列文章将整理介绍 tshark
相关内容。本文将介绍与 tshark
相关的流量解决方案。
利用 tshark,不仅可以对现有的 pcap 文件进行分析,由于可以输出其他格式,也就可以结合 ES 的强大搜索能力,达到对数据报文进行记录、分析处理的能力,可以实现回溯分析,结合 kibana 可视化工具,甚至达到实时可视化监控。
tshark + elastic stack
elastic stack 全家桶
性能一直被诟病,后来另起炉灶,针对采集使用 golang
构建出一套 beats,用于不同的采集场景。其中针对网络流量,开发出packetbeat
。
packetbeat 的优势是定制了 elasticsearch
的mapping
、kibana
一系列可视化图表,可以满足一般对 tcp、dns、udp 等常规报文的分析。基本达到开箱即用程度。
但 packetbeat 也有不足,对报文的分析采用会话分析,没有一个个报文单独分析,倾向于应用层,对网络层面分析不足(尤其是故障排查时),此外,支持的协议有限,仅常见协议与 tshark
的 2000 多种存在明显差距,当遇到不支持时,需要等待支持或手动写插件,难度极高。
离线导入 elasticsearch
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”
注:
- 导入时可能存在导入失败,由于
_bulk
接口对 post 的文件大小有限制,尽量不要超过 15MB,最好在 10MB 以内。如果超过,建议使用 tshark 的输出条件生成多个 json 文件,使用 curl 依次导入。 - 如果导入失败,可以在
curl
加-v
查看提示信息。 - 默认索引名为类似
packets-2019-04-23
(报文记录的日期),可以导入后重新索引
可以使用类似以下命令查看导入情况:
curl ‘http://127.0.0.1:9200/packets-2019-04-23/_search/?size=10&pretty=true’
实时监控方案
主要思路
- 使用
tshark
实时抓取报文,并启用过滤策略 - 使用
tshark
解析捕获的报文,提取指定的字段并写入 csv 文件中,或者使用 json 格式在下一步进行 ETL writes captured wireless packets as .csv. - 使用
filebeat
持续检测 csv 文件,并发个 logstash 用于字段过滤之类(如无需过滤可以跳过 logstash 直接发给 elastsearch) -
logstash
对字段进行过滤,格式转化等,之后发到 elasticsearch - 使用 kibana 进行数据可视化,对报文统计分析
简单实现
1. tshark 部分
tshark -a duration:600 -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
2. filebeat
简单 filebeat.yml 配置文件
filebeat.modules:
- module: system
syslog:
enabled: false
auth:
enabled: true
var.paths: ["/home/tshark.csv"]
name: test
output.logstash:
hosts: ["localhost:5044"]
3. logstash
logstash.yml 文件,主要分为:
- 监听 5044 端口接收 beats 的数据
- 对数据按照 csv 格式解析,字段分割
- 对日期处理,转换格式
- 添加时、分、秒,便于索引
- 对部分字段转换为数字格式
- 替换字段
- 输出到 elasticsearch
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]}"
}
}
4. elasticsearch
可以预先导入索引定义mapping
,这块可以查 elasticsearch 文档
5. kibana
利用图表、面板等进行数据可视化,实现监控功能,这块可根据业务需求进行发挥~
小结
使用 tshak 的报文解析、数据导出功能,可以根据需求灵活处理,借助开源的大数据工具,可以实现更贴合业务的工具,实现快速对网络分析、实时监控、故障排查、高级检索、回溯分析、统计报表等,甚至在部分场景下可以替代商业的网络回溯分析系统。
参考:
- moloch 网络流量回溯分析系统
- Tshark Logstash Filebeat Kibana Elasticsearch
系列文章:
- 网络分析利器 wireshark 命令版(1):tshark 简介
- 网络分析利器 wireshark 命令版(2):tshark 使用示例
- 网络分析利器 wireshark 命令版(3):Apache Spot 中 tshark 模块
- 网络分析利器 wireshark 命令版(4):tshark 结合 ES