あんたいとる

無駄の中に宝がある!

【Fortigate】 snifferコマンドの基本的な使用方法

以下の記事で紹介したコマンドの中から "diagnose sniffer packet" コマンドを詳細に取り上げます。

【Fortigate】 トラブルシューティングに役立つ基本コマンド 10 - あんたいとる

パケットをキャプチャするその前に

パケットキャプチャを取得するには、WebUIでの方法とCLIsnifferコマンドを実行する方法がありますが、今回はsnifferコマンドによる方法を紹介します。
実際にコマンドを実行する前の準備としてTeratermでログを取得する設定をしておきます。

  1. Teratermメニューから[ファイル] > [ログ]を選択

  2. オプションの「タイムスタンプ」のチェックボックスをONにして「保存」
    ※これは必須ではありませんが、ログにタイムスタンプが記録されるので出力結果を確認するときに便利です。

snifferコマンドによるパケットキャプチャの実行

snifferコマンドの構文

# diagnose sniffer packet <interface_name> <‘filter’> <verbose> <count> <tsformat>

snifferコマンドは CTRL+Cは停止します。

引数 意味と指定可能な値
interface_name パケットをキャプチャするインターフェース名("wan1", "internal" など) を指定します。すべてのインターフェースを指定する場合は "any" にします。
指定可能な値: wan1, internal, any など
filter パケットをキャプチャする対象の通信を指定
フィルタはシングルクォート(')でくくる必要があります。フィルタ条件の構文については後述します。
verbose どのぐらい詳細な情報まで取得するかを指定。指定するレベルによる出力情報の違いについては後述します。
count 取得するパケット数を指定します。数字を指定しない場合は、CTRL+Cで停止するまで実行されます。
tfsormat タイムスタンプの形式
a: UTC時間(yyyy-mm-dd hh:mm:ss.ms)
l: LOCAL時間(yyyy-mm-dd hh:mm:ss.ms)
それ以外: コマンド実行後からの相対時間 ss.ms
フィルタ条件の構文

構文: '[[src|dst] host<host_name_or_IP1>] [[src|dst] host<host_name_or_IP2>] [[arp|ip|gre|esp|udp|tcp] [port_no]] [[arp|ip|gre|esp|udp|tcp] [port_no]]'

Verboseレベルの指定による出力内容の違い
レベル IPヘッダ IPペイロード Ethernetヘッダ ポート名
1
2
3
4
5
6

フィルタ条件の例

PC1(192.168.1.2)と PC2(10.0.0.2)との通信をキャプチャする場合
#  diagnose sniffer packet any "host 192.168.1.2 or host 10.0.0.2" 
interfaces=[any]
filters=[host 192.168.22.22 or host 10.0.0.2]
1.042087 192.168.1.2 -> 10.0.0.2: icmp: echo request
1.042315 10.0.0.2 -> 192.168.1.2: icmp: echo reply
1.043731 10.0.0.2.22 -> 192.168.1.2.58615: psh 3823799241 ack 366076191
1.044374 10.0.0.2.22 -> 192.168.1.2.58615: psh 3823799341 ack 366076191
1.045366 192.168.1.2.58615 -> 10.0.0.2.22: ack 3823799441
PC1(192.168.22.4)と Fortigate(192.168.22.99)との SSH通信をキャプチャする場合
# diagnose sniffer packet any '(host 192.168.22.22 or host 192.168.22.99) and tcp port 22' 1 5
interfaces=[any]
filters=[(host 192.168.22.22 or host 192.168.22.99) and tcp port 22]

1.692147 192.168.22.4.58615 -> 192.168.22.99.22: psh 366089139 ack 3823817109
1.693057 192.168.22.99.22 -> 192.168.22.4.58615: psh 3823817109 ack 366089191
1.694278 192.168.22.99.22 -> 192.168.22.4.58615: psh 3823817161 ack 366089191
1.700700 192.168.22.4.58615 -> 192.168.22.99.22: ack 3823817293
1.700808 192.168.22.99.22 -> 192.168.22.4.58615: psh 3823817293 ack 366089191
PC1(192.168.22.4)と Fortigate(192.168.22.99)との通信または arpパケットをキャプチャする場合
# diagnose sniffer packet any 'host 192.168.22.22 or host 192.168.22.99 or arp"
interfaces=[any]
filters=[host 192.168.22.22 or host 192.168.22.99 or arp]
28.329606 arp who-has 192.168.22.99 (8:5b:e:4:c0:99) tell 192.168.22.4
28.329727 arp reply 192.168.22.99 is-at 8:5b:e:4:c0:99
PC1(192.168.22.4)と DNSサーバ(8.8.8.8 または 4.4.4.4)の間の UDP/53 の通信をキャプチャする場合
# diagnose sniffer packet any 'udp and port 53 and host 192.168.22.4 and (8.8.8.8 or 4.4.4.4)'

参考URL

Knowledge Base: Technical Note : トラブルシューティングツール: パケットキャプチャコマンド (Japanese version only)
Knowledge Base: Troubleshooting Tool: Using the FortiOS built-in packet sniffer
Knowledge Base: Technical Tip: Packet capture (sniffer)