私は与えられたpcapファイルに基づいて特定の質問に答えるべき課題を実行しています。問題の1つは、送信されたパケット数に基づいて上位5つの送信元IPアドレスを見つけることです。
私は次のコマンドを思い出しました。
$ tshark -r assign1.pcap | sort -n -7 | tail -n 5 | awk '{print $3}'
どこ
tshark -r
pcapファイルを読むassign.pcap
パケットキャプチャファイルですsort -n -7
列7に基づいてファイルをソートします(この列には各IPアドレスのパケット長が含まれています)。tail -n 5
最大のパケット長を持つ最後の5つのレコードを印刷します。awk '{print $3}
3番目の列のみが印刷されます。
uniq
これで、独自の上位5つのソースIPアドレスが必要になるため、これは私の問題です。だから私はスクリプトの最後でパイプコマンドを試してみましたが、役に立ちませんでした。私もsort -u -t, -k3,3
これを使ってみました。協会しかし、これはユニークなIPアドレスも印刷しません!
私のpcapファイルの列ヘッダーは次のとおりです。
答え1
tshark
出力物を再構成して活用すればはるかに-T fields
簡単になりそうです。私はあなたが望むことを次のように達成できました。
$ tshark -r blah.pcap -T fields -e frame.len -e ip.src | sort -k 1n | tail -5
92 10.0.2.2
92 10.0.2.2
92 10.0.2.2
100 10.0.2.15
156 10.0.2.15
シャークフィールド
このコマンドを使用して、すべてのフィールドのリストを取得できます。
$ tshark -G field
しかし、読書が少し難しかったと思います。出力の列を知りたい場合は、-G field
こちらをご覧ください。tshark - ネットワークトラフィックダンプと分析:
* Header Fields
* -------------
* Field 1 = 'F'
* Field 2 = descriptive field name
* Field 3 = field abbreviation
* Field 4 = type (textual representation of the ftenum type)
* Field 5 = parent protocol abbreviation
* Field 6 = base for display (for integer types); "parent bitfield width" for FT_BOOLEAN
* Field 7 = bitmask: format: hex: 0x....
* Field 8 = blurb describing field
十分に勇敢な場合は、次のようにgrep
出力をフィルタリングできます。
$ tshark -G fields | grep -P '\s+(ip.src|frame.len)\s+'
F Frame length on the wire frame.len FT_UINT32 frame BASE_DEC 0x0
F Source ip.src FT_IPv4 ip 0x0
引用する
答え2
だからプロンプトを受け取った後これ答え、私は次のスクリプトを思いついた。
$ tshark -r assign1.pcap | sort -n -r -k7 | awk '!seen[$3]++' | awk '{print $3}' | head -n 5 >> result.txt
次の行の各コマンドを解釈します。
tshark -r assign1.pcap
pcapファイルを読むsort -n -r -k7
(-r) (-k7) 列 7 の逆順に数字で (-n) ファイルをソートします。 [この列には各IPアドレスのパケット長が含まれています。]awk '!seen[$3]++'
以前に見たことのない送信元IPアドレス(3列)を印刷するため、この方法では一意のIPのみが印刷されます。awk '{print $3}'
3番目の列(ソースIPアドレス)のみを印刷します。head -n 5 >> result.txt
最初の5つが必要なので頭コマンドを実行し、最後に>> result.txt
最終結果をテキストファイルに追加します。