Solaris -> Solaris10 -> ネットワーク

snoopでネットワークキャプチャ

特定端末でのコマンド入力内容をキャプチャする

キャプチャ用snoopコマンド

# snoop -V -q -d pcn1 -o snoop.out port 23 from host 192.168.0.99
Using device /dev/pcn1 (promiscuous mode)

 ホスト 192.168.0.99 からの(port:23)パケットのみを取得する。
   -V:           詳細要約モード
   -d:           NICを指定
   -q:           パケットカウントを表示しない(パフォーマンス向上)
   from host ip: ホストからのパケットのみ対象

キャプチャ用シェル(snoop_cap.sh)

#!/bin/sh
LAST_LINE=0
while true;do
   SIZ=`ls -l /tmp/snoop.out | awk '{print $5}'`
   if [ "${SIZ}" != "${LAST_SIZ}" ]; then
      snoop -r -i snoop.out -x 55,3 | grep -v "^$" | grep -v TELNET | \
                                      awk '{print $2,$4}' > /tmp/a.txt
      LINES=`wc -l a.txt | awk '{print $1}'`
      ADD_LINES=`expr ${LINES} - ${LAST_LINE}`
      tail -${ADD_LINES} /tmp/a.txt | while read X C;do
         case ${X} in
           0d00|0d0a)  # Enter
             echo ""
             ;;
           2000|20aa)  # Space
             echo " \c"
             ;;
           0800|08aa)  # Back Space
             echo "(BS)\c"
             ;;
           1b00|1baa)  # Escape
             echo "(ESC)\c"
             ;;
           0900|09aa)  # TAB
             echo "(TAB)\c"
             ;;
           1500|15aa)  # Ctrl+u
             echo "(Ctr+u)\c"
             ;;
           0300|03aa)  # Ctrl+c
             echo "(Ctr+c)\c"
             ;;
           aa00|0000|aaaa|00aa) # Other Packets
             ;;
           *) # Output
             echo "${C}\c" | cut -c1
             ;;
         esac
      done
   fi
   sleep 1
   LAST_SIZ=${SIZ}
   LAST_LINE=${LINES}
done
 * snoop オプション:
    -r : IPアドレスの名前解決をしない(パフォーマンス向上)
    -x : パケットのコマンド部分 55 から 2 バイト。
         この場合2にするとキャラクタ部分が文字化けしてしまうので3にする。

 * 文字以外のコードを表示させる条件文
   0d00(0d0a)改行 : 環境によって上位4ビットが00の場合があるので2種類用意する。

1文字の全パケット内容


# snoop -i snoop.out -x 0 
 -x 0 を指定すると全てのパケットを表示。コマンド部分は赤字フォント

683   0.14745 192.168.0.99 -> 192.168.0.5       TELNET C port=3174

           0: 000c 29da 979b 0050 56c0 0008 0800 4500    ..)....PV.....E.
          16: 0029 6551 4000 8006 3e55 c0a8 eaea c0a8    .)eQ@...>U......
          32: eaec 0c66 0017 69c5 a515 3406 d4a8 5018    ...f..i...4...P.
          48: ff56 2845 0000 0d00 0000 0000              .V(E........

キャプチャ実行(snoop_cap.sh)

シェルを実行するとほぼリアルタイムでコマンドの内容が表示される。
/etc/hosts を書き換える場合

# ./snoop_cap.sh | tee /dev/tty > /tmp/snoop_cap.log 同時にログにも出力
..........root                    * ログイン
root                              * パスワード
cd /etc/inet                      
ls -l hosts
vi hosts.(BS)                     * vi起動 .は誤入力その後BackSpace
Gddo192.168.0.1     aaaa.:wq!     * viでのコマンド
exit                              * ログアウト


先頭へ

      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google