tshark
是網絡分析工具wireshark
下的一個工具,主要用於命令行環境進行抓包、分析,尤爲對協議深層解析時,tcpdump
難以勝任的場景中。本文將介紹與tshark
相關的流量解決方案。git
利用tshark,不只能夠對現有的pcap文件進行分析,因爲能夠輸出其餘格式,也就能夠結合ES的強大搜索能力,達到對數據報文進行記錄、分析處理的能力,能夠實現回溯分析,結合kibana可視化工具,甚至達到實時可視化監控。github
最先ELK全家桶,logstash性能一直被詬病,後來另起爐竈,針對採集使用golang
構建出一套beats,用於不一樣的採集場景。其中針對網絡流量,開發出packetbeat
。golang
packetbeat
的優點是定製了elasticsearch
的mapping
、kibana
一系列可視化圖表,能夠知足通常對tcp、dns、udp等常規報文的分析。基本達到開箱即用程度。json
但packetbeat
也有不足,對報文的分析採用會話分析,沒有一個個報文單獨分析,傾向於應用層,對網絡層面分析不足(尤爲是故障排查時),此外,支持的協議有限,僅常見協議與tshark
的2000多種存在明顯差距,當遇到不支持時,須要等待支持或手動寫插件,難度極高。bash
tshark
支持將pcap報文分析後生成json文件導入elasticsearch
,同時支持elasticsearch
的批量導入接口_bulk
的格式,命令以下:網絡
tshark -r test_trace.pcap -T ek > test_trace.pcap.json併發
以後能夠將json文件經過curl
導入。app
curl -s -H 「Content-Type: application/x-ndjson」 -XPOST 「localhost:9200/foo/_bulk」 — data-binary 「@/Users/test-elastic/test_trace.pcap.json」curl
注:elasticsearch
_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
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配置文件
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
的報文解析、數據導出功能,能夠根據需求靈活處理,藉助開源的大數據工具,能夠實現更貼合業務的工具,實現快速對網絡分析、實時監控、故障排查、高級檢索、回溯分析、統計報表等,甚至在部分場景下能夠替代商業的網絡回溯分析系統。
參考
未經許可,禁止轉載