0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

tsharkをいじってみた

Last updated at Posted at 2023-05-18

今回のお話

  • 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 %

引用

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?