だいぶ古いコマンドみたいなんですが、結構便利なので。
ngrepは、サーバーに対して通信した情報をわかりやすくキャプチャしてくれるコマンドです。
こういうのって、クライアントサイドで可視化してくれるツールはあったりもしますが(FireBugとか)、サーバーサイドで動かした方が便利であったり、取れない情報もあったりしますので、場合によってはかなり便利に使えると思います。
見え方はこんな感じ。
T 192.168.0.1:80 -> 192.168.0.2:1978 [A] HTTP/1.1 200 OK. Date: Wed, 18 Nov 2009 15:34:44 GMT. Server: Apache/2.2.3 (CentOS). Last-Modified: Tue, 26 Aug 2008 15:20:20 GMT. ETag: "3954c06-4486-711f3500". Accept-Ranges: bytes. Content-Length: 17542. Connection: close. Content-Type: text/plain. .
HTTPの通信に限らず、色んなパケットをキャプチャできます。
ngrepのインストール
まずは、ソースをダウンロード し、サーバー内で展開します。
後は、お決まりの呪文でとりあえずいけるかと。
私の環境では、関連するライブラリが不足していたため、configureでエラーがでましたが、それをインストールすることで回避できました。(後述のおまけ参照)
# tar -jxvf ngrep-1.45.tar.bz2 # ./configure # make # make install
ngrepを使ってみる
幾つかオプションがありますが、基本的な使い方は下記のような感じになります。
# ngrep -W byline 'HTTP' -q
行単位で出力するようにし(-W bylineオプション)、キャプチャしたパケットの中身をみてHTTPのものだけを表示し('HTTP'で指定)、関係ないものを表示しなく(-qオプション)しています。
この他にも
# ngrep -W byline -q port 80
とすることで、80番ポートの通信だけを見てみたり、
# ngrep -W byline 'HTTP' -q -d eth0
とすることで、eth0のNICの通信だけを対象にして見てみたりすることもできます。
また、POSTしてきた内容を見ることもできますので、デバッグしてみたりという用途にも便利です。
例えば、テキストボックスからデータを送信したときのパケットをキャプチャしてみると、
T 192.168.0.2:2458 -> 192.168.0.1:80 [AP] GET /hoge/form.html HTTP/1.1. Host: 192.168.0.1. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729). Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8. Accept-Language: ja,en-us;q=0.7,en;q=0.3. Accept-Encoding: gzip,deflate. Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7. Keep-Alive: 300. Connection: keep-alive. If-Modified-Since: Wed, 18 Nov 2009 15:33:50 GMT. If-None-Match: "1e7c008-93-f8263380". . T 192.168.0.2:2460 -> 192.168.0.1:80 [AP] POST /hoge/post.php HTTP/1.1. Host: 192.168.0.1. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729). Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8. Accept-Language: ja,en-us;q=0.7,en;q=0.3. Accept-Encoding: gzip,deflate. Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7. Keep-Alive: 300. Connection: keep-alive. Referer: http://192.168.0.1/hoge/form.html. Content-Type : application/x-www-form-urlencoded. Content-Length: 51. . form1=%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%EF%BD%9E T 192.168.0.1:80 -> 192.168.0.2:2460 [AP] HTTP/1.1 200 OK. Date: Wed, 18 Nov 2009 15:58:27 GMT. Server: Apache/2.2.3 (CentOS). X-Powered-By: PHP/5.1.6. Content-Length: 15. Connection: close. Content-Type: text/html. .
というような通信内容が見れます。(POSTした内容はエンコードされてますけどね)
おまけ - インストール時のエラーの対処 -
configure時に、下記のようなエラーが出ました。
# ./configure -snip- checking for a broken redhat glibc udphdr declaration... no checking for a complete set of pcap headers... no !!! couldn't find a complete set of pcap headers
原因は、下記の関連するライブラリが無かったためで、yumでインストールし再度configureしなおしてみると上手くいきました。
libpcap libpcap-devel
[PR]So-netでauひかり!今なら20,000円キャッシュバックキャンペーン実施中!
[PR]ネットワーク技術が基礎から身につく 日経NETWORK
関連記事
ftpやscp不要でターミナルエミュレータを通してファイル転送ができるlrzszパッケージ
mod_actionsを使ってドキュメントや画像、Flashファイルを保護する
サーバー管理で知っておきたいコマンドあれこれ。 - apachetop編 -
セキュリティ診断ツール「Nikto」を使ってサイトをチェックしよう
XSS(クロスサイトスクリプティング)対策に便利なFireFoxアドオンXSS Me