Kozupon.com    
 
 ICMPを使わないhping2コマンド!


pingのようでpingじゃない(笑)。
通常、pingコマンドはICMPプロトコルを使って通信を行う。これは、ここの「 技術の部屋 」の「 pingの正体! 」を見てもらうと解る。ここで説明するhping2はICMPプロトコルは使わない。これは、TCP/IPのパケットを生成しその応答を受け取り解析するためのコマンドである。さらに、オプションパラメータでICMP、UDPとかのプロトコル選択も出来る。私的には、ファイアーウォールのフィルタリング診断などに役に立つような気がしてる。何となく。
以下に、セットアップ方法から使い方迄を説明する。

■ セットアップ環境
PC:PC/AT互換機
OS:VineLinux2.6R


1.セットアップ

1)ソースをゲットする
hping2の公式サイトは、 http://www.hping.org/ である。ここから、ソースをゲットしてくる。
現在(2003/11)の最新ソースは、hping2.0.0-rc2.tar.gz で有った。

注:
FreeBSDには、Portsで用意される。/usr/ports/security/hping

2)コンパイルとビルド

# tar zxvf hping2.0.0-rc2.tar.gz

# chown -R root.root hping2-rc2

# cd hping2-rc2

# ./configure

# make

# make install

3)テスト

[root@yh src]# hping2 192.168.0.44
HPING 192.168.0.44 (eth0 192.168.0.44): NO FLAGS are set, 40 headers + 0 data bytes
len=46 ip=192.168.0.44 ttl=64 id=3233 sport=0 flags=RA seq=0 win=0 rtt=1.8 ms
len=46 ip=192.168.0.44 ttl=64 id=3234 sport=0 flags=RA seq=1 win=0 rtt=0.8 ms
len=46 ip=192.168.0.44 ttl=64 id=3235 sport=0 flags=RA seq=2 win=0 rtt=0.8 ms
len=46 ip=192.168.0.44 ttl=64 id=3236 sport=0 flags=RA seq=3 win=0 rtt=0.8 ms
len=46 ip=192.168.0.44 ttl=64 id=3237 sport=0 flags=RA seq=4 win=0 rtt=0.8 ms
len=46 ip=192.168.0.44 ttl=64 id=3238 sport=0 flags=RA seq=5 win=0 rtt=0.9 ms
len=46 ip=192.168.0.44 ttl=64 id=3239 sport=0 flags=RA seq=6 win=0 rtt=0.8 ms

--- 192.168.0.44 hping statistic ---
7 packets tramitted, 7 packets received, 0% packet loss
round-trip min/avg/max = 0.8/1.0/1.8 ms

わーい!とりあえずセットアップはうまく行ったぁ〜(^^)v


2.hping2オプションパラメータ

1) 動作に関連するオプションパラメータ

-v --version バージョン表示
-c --count パケットを何回送信するかの指定
-i --interval パケット送信間隔を設定する
-n --numeric 出力時にホスト名の逆引きしない
-I --interface パケットを送信するためのインターフェース設定
-V --verbose 詳しい出力を行う

2) プロトコルに関するオプションパラメータ

-1 --icmp ICMPパケット指定するオプション
-2 --udp UDPパケットを指定するオプション

3) IPに関連するオプション

-a 発信元アドレスに指定した物に偽造する
-t TTLを指定する

4) ICMPに関連するオプション

--icmptype -1や--icmpと一緒に用いて、ICMPタイプを指定する
--icmpcode ICMPコードを指定する

5) TCPとUDPに関連するオプション

-s 送信元ポート番号を指定する
--keep 送信元ポート番号のインクリメントを抑制する
-p 送信ポート番号を指定する
-F FINフラグを立てたパケットを送信する
-S SYNフラグを立てたパケットを送信する
-R RSTフラグを立てたパケットを送信する
-P PSHフラグを立てたパケットを送信する
-A ACKフラグを立てたパケットを送信する
-U URGフラグを立てたパケットを送信する
-d パケットのデータサイズを指定する(デフォルトは 0 )


3.実際に使ってみる

1) 何も返事がなかった
192.168.0.43の80番ポートへhpingした。

bash-2.05b# hping -p 80 192.168.0.43
HPING 192.168.0.43 (ed0 192.168.0.43): NO FLAGS are set, 40 headers + 0 data bytes

何も返事がないよぉ〜(?_?)

今度は、25番ポートへhpingした。
bash-2.05b# hping -p 25 192.168.0.43
HPING 192.168.0.43 (ed0 192.168.0.43): NO FLAGS are set, 40 headers + 0 data bytes
len=46 ip=192.168.0.43 ttl=255 DF id=0 sport=25 flags=RA seq=0 win=0 rtt=1.6 ms
len=46 ip=192.168.0.43 ttl=255 DF id=0 sport=25 flags=RA seq=1 win=0 rtt=1.0 ms
len=46 ip=192.168.0.43 ttl=255 DF id=0 sport=25 flags=RA seq=2 win=0 rtt=1.0 ms
len=46 ip=192.168.0.43 ttl=255 DF id=0 sport=25 flags=RA seq=3 win=0 rtt=0.8 ms

今度は、返事が来た。
つまり、80番ポートは何らかのサービスが起動してることを意味する。
    ^^^^^^
25番は何もサービスが起動してない。

2) もっと詳しく80番ポート

bash-2.05b# hping -n -S -p 80 -c 5 192.168.0.43
HPING 192.168.0.43 (ed0 192.168.0.43): S set, 40 headers + 0 data bytes
len=46 ip=192.168.0.43 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=5840 rtt=2.0 ms
len=46 ip=192.168.0.43 ttl=64 DF id=0 sport=80 flags=SA seq=1 win=5840 rtt=0.8 ms
len=46 ip=192.168.0.43 ttl=64 DF id=0 sport=80 flags=SA seq=2 win=5840 rtt=1.6 ms
len=46 ip=192.168.0.43 ttl=64 DF id=0 sport=80 flags=SA seq=3 win=5840 rtt=0.8 ms
len=46 ip=192.168.0.43 ttl=64 DF id=0 sport=80 flags=SA seq=4 win=5840 rtt=0.8 ms

-n 出力するときホスト名を逆引きしない。
-S SYNフラグを立てたパケットを送信する
-p 80 80番ポートへ送信する
-c 5 パケットを5回送信する

ip=192.168.0.43、ここのサーバからACKが返って来ている。
sport=80、source portを意味する。この場合、送信元80番ポートであることを意味している。
flags=SA、TCPフラグの状態を示している。この場合、SYNフラグとACKフラグが立っている。

確かに、何らかのサービス(ウェルノンポートなのでWebサービス)が立ち上がっていることが解る。

hping2はこのようにポートスキャナのように使える。さらに、俺が思うにフィルタリングの評価等にも有効かと思う(^_^)。
是非、使ってみてぇ〜(^^)v

以上


 
 
 



Copyright 2005 Kozupon.com.