今回のお話
- wiresharkがquicに対応したらしい
- 自分の環境でどの程度quicが利用されているのかを見てみたかったので、tsharkを触ってみた
- shellscriptを利用して自分なりに機能追加してみた(mac bookで動作)
そもそもwiresharkとは
- パケットキャプチャを行う超有名なツール
ではtsharkとは
- wiresharkのcli版
- 実際にwiresharkインストールすると同時にインストールされる
tsharkの使い方
- 利用可能なinterfaceを列挙
tshark -D
- interface, 時間を指定してパケットキャプチャ
tshark -i $interface -a duration: $second
- ファイルの形式を指定して出力
tshark -i $interface -a duration: $second -w $filename
その他にも様々なオプションが存在
本題
-
tsharkでは様々なオプションがある
-
ただ、キャプチャしたパケットのプロトコル指定は煩雑(正確には特定のプロトコルだけをキャプチャすることできる)
-
使用されているプロトコルを列挙、プロトコルを指定すれば、割合を表示できるように
以下にコードを掲載
newshark.sh
NECESSARY_OPT=false
filename='test.pcap'
duration=3
protocol='QUIC'
function lack_of_necessary_param() {
echo "-iオプションは必須オプションです."
exit 1
}
function usage {
cat <<EOM
Usage: $(basename "$0") [OPTION]...
-h Display help
-f FILE file name
-p TYPE protocol
-t SECOND time to capture
-i INTERFACE interface(this is necessary parameter)
EOM
exit 2
}
while getopts ":f:p:t:i:h" optKey; do
case "$optKey" in
f)
echo "filename is ${OPTARG}"
filename=${OPTARG}
;;
p)
echo "protocol is ${OPTARG}"
protocol=${OPTARG}
;;
t)
echo "capture time is ${OPTARG}s"
duration=${OPTARG}
;;
i)
NECESSARY_OPT=true
echo "interface is ${OPTARG}"
interface=${OPTARG}
;;
'-h'|'--help'|* )
usage
;;
esac
done
if [ "${NECESSARY_OPT}" != true ]; then
lack_of_necessary_param
fi;
declare -a pro_array
pro_array=()
tshark -i $interface -w $filename -a duration:3
line_num=`tshark -r ${filename} | wc -l`
echo 'whole line number is: ' $line_num
tshark -r ${filename} > 'tmp.txt'
while IFS= read -r line || [[ -n "$line" ]];
do
array=($line)
proto=${array[5]}
pro_array+=("$proto")
done < 'tmp.txt'
# echo ${#pro_array[@]}
protocols=()
protocols=$( printf "%s\n" "${pro_array[@]}" | sort -u )
echo 'The protocols you use: '${protocols[@]}
pro_file=${protocol}'_tmp.txt'
tshark -r ${filename} | grep ${protocol} > $pro_file
pro_line=`cat ${pro_file} | wc -l`
echo 'contained '${protocol}' is: ' ${pro_line}
pro_ratio=$(( (pro_line * 100) / line_num ))
echo 'the '${protocol}' ratio is: ' ${pro_ratio} '%'
使用法を説明
コードの冒頭部分は、保存先のファイル名、キャプチャ時間、プロトコル名に初期値を与えている。
本プログラムはキャプチャしたいプロトコルを指定しない場合、QUICを初期値として設定している(完全に私の独断)。
また、パケットをキャプチャするインターフェースの指定は必須。
使用する際には、以下のようにパラメータを指定して、実行する。
./newshark.sh -i $interface -f $filename -p $protocol -t $time
以下が実行結果になっている。
packet_capture % newshark -i en7 -t 5
interface is en7
capture time is 5s
Capturing on 'USB 10/100/1000 LAN: en7'
** (tshark:31257) 18:28:17.364949 [Main MESSAGE] -- Capture started.
** (tshark:31257) 18:28:17.365425 [Main MESSAGE] -- File: "test.pcap"
3026
tshark:
whole line number is: 3026
The protocols you use: DNS ICMP MDNS QUIC SSDP TCP TLSv1.2 UDP
contained QUIC is: 389
the QUIC ratio is: 12 %
引用
- wiresharkのquic対応
- tsharkソースコード
- tsharkのオプション