下記のページで紹介されている EPC(Embedded Packet Capture) について紹介します。
この機能は 12.4(20)T 以降で実装されました。現在 102400Kbytes までキャプチャが可能となっており、リモートでキャプチャ機器の設置が難しい場合や、キャプチャするためにスイッチは挟んだりするのが難しい場合には有効に使える場合があるかと思います。
このEPCを使うことで、最大 102400Kbytes のバッファにパケットをキャプチャし、TFTP/FTPでexportすることでWiresharkなどのキャプチャ解析ソフトで開くことが可能です。
EPCでのキャプチャ手順
c2821# monitor capture buffer pacbuf size 512
上記でバッファ名 pacbuf とし、キャプチャバッファのサイズを 512Kbytes に設定しています。(default は 1024Kbytes)
c2821# monitor capture point ip process-switched ipsw in
上記 process-switched を指定していることより、Process Switching されるパケットのみをキャプチャする指定になります。ここを cef にすることで CEF Switching されるパケットもキャプチャすることが可能です。 ipsw はキャプチャポイント名です。
c2821#
*Sep 23 12:37:05.899 JST: %BUFCAP-6-CREATE: Capture Point ipsw created.
c2821# monitor capture point associate ipsw pacbuf
上記でキャプチャポイント名とバッファ名を関連付けます。
c2821# monitor capture point start all
上記コマンドでキャプチャを開始します。
c2821#
*Sep 23 12:40:00.455 JST: %BUFCAP-6-ENABLE: Capture Point ipsw enabled.
c2821# show monitor capture buffer all parameters
Capture buffer pacbuf (linear buffer)
Buffer Size : 524288 bytes, Max Element Size : 68 bytes, Packets : 3173Allow-nth-pak : 0, Duration : 0 (seconds), Max packets : 0, pps : 0
Associated Capture Points:
Name : ipsw, Status : ActiveConfiguration:
monitor capture buffer pacbuf size 512
monitor capture point associate ipsw pacbuf
上記は3173パケットがキャプチャできており、まだ512Kbytesに達していないため Status: Active な状態です。
c2821#
*Sep 23 12:41:14.575 JST: %BUFCAP-6-DISABLE: Capture Point ipsw disabled.
*Sep 23 12:41:14.575 JST: %BUFCAP-5-BUFFER_FULL: Linear Buffer associated with capture buffer pacbuf is full.
Buffer 512Kbytes に達すると、上記メッセージが出力されキャプチャは停止します。
c2821# show monitor capture buffer all parameters
Capture buffer pacbuf (linear buffer)
Buffer Size : 524288 bytes, Max Element Size : 68 bytes, Packets : 3855Allow-nth-pak : 0, Duration : 0 (seconds), Max packets : 0, pps : 0
Associated Capture Points:
Name : ipsw, Status : InactiveConfiguration:
monitor capture buffer pacbuf size 512
monitor capture point associate ipsw pacbuf
上記から 3855 パケットをキャプチャし Buffer 上限の 512Kbytes に達したため Status: Inactive となりキャプチャが停止していることが分かります。
手動でキャプチャを停止する場合は下記コマンドを使います。
c2821# monitor capture point stop all
キャプチャデータの確認とエクスポート
c2821# show monitor capture buffer pacbuf12:40:00.463 JST Sep 23 2010 : IPv4 Process : Di1 None
12:40:00.479 JST Sep 23 2010 : IPv4 Process : Di1 None
12:40:00.499 JST Sep 23 2010 : IPv4 Process : Di1 None
(snip)
上記は Dialer1 から受信した Process Swiching されるパケットがキャプチャできていることが確認できます。
また、下記 dump オプションをつけることでパケットのダンプ表示ができます。
c2821# show monitor capture buffer pacbuf dump12:40:00.463 JST Sep 23 2010 : IPv4 Process : Di1 None
4465BE90: FF030021 45000064 8C850000 FF015753 ...!E..d......WS
4465BEA0: C0A80102 0B0B0B0B 08009F4A 0005320B @(.........J..2.
4465BEB0: 00000000 651347DC ABCDABCD ABCDABCD ....e.G\+M+M+M+M
4465BEC0: ABCDABCD ABCDABCD ABCDABCD ABCDABCD +M+M+M+M+M+M+M+M
4465BED0: ABCDABCD 00 +M+M.
12:40:00.479 JST Sep 23 2010 : IPv4 Process : Di1 None
4465BE90: FF030021 45000064 8C860000 FF015752 ...!E..d......WR
4465BEA0: C0A80102 0B0B0B0B 08009F35 0005320C @(.........5..2.
4465BEB0: 00000000 651347F0 ABCDABCD ABCDABCD ....e.Gp+M+M+M+M
4465BEC0: ABCDABCD ABCDABCD ABCDABCD ABCDABCD +M+M+M+M+M+M+M+M
4465BED0: ABCDABCD 00 +M+M.
(snip)
また、default では上記の通り全てのパケットが 68bytes のサイズで切られてしまい、ヘッダ+α程度しかキャプチャがされません。この情報だけでもSource/Destination等は分かりますが、パケットの中身も必要な場合は、下記コマンドでサイズを 68bytes->1024bytes(最大は9500bytesまで設定可能)へ変更できます。
c2821# monitor capture buffer pacbuf max-size 1024c2821# show monitor capture buffer all parameters
Capture buffer pacbuf (linear buffer)
Buffer Size : 524288 bytes, Max Element Size : 1024 bytes, Packets : 0
Allow-nth-pak : 0, Duration : 0 (seconds), Max packets : 0, pps : 0
Associated Capture Points:
Name : ipsw, Status : Inactive
Configuration:
monitor capture buffer pacbuf size 512 max-size 1024monitor capture point associate ipsw pacbuf
バッファのデータは下記コマンドでFTPサーバへエクスポートすることが可能です。
FTPサーバにエクスポートしたファイルは Wireshark で開くことができます。
キャプチャバッファをクリアしたい場合は下記のコマンドになります。
c2821# monitor capture buffer pacbuf clear
バッファ名やキャプチャポイント等をいくつも作成したりして、使い分けたりする必要がなければ alias を作成して使うのが楽です。
例えば、私は下記のような alias を作成して使っています。参考まで。
(config)# alias exec cstart monitor capture point start all(config)# alias exec cclear monitor capture buffer pacbuf clear(config)# alias exec ccheck show monitor capture buffer all parameters(config)# alias exec ccopy monitor capture buffer pacbuf export ftp://192.168.1.1//files/pacbuf_c2821.pcap(config)# alias exec cstop monitor capture point stop all