ネットワーク診断やセキュリティテストを目的としたパケット生成ツール
hping3
この記事では、hping3の基本的な使い方から高度なオプション活用法まで、具体例を挙げながら詳しく解説しています。
- hping3の基本的な使い方
- hping3のオプション一覧
- オプションの具体的な使用例
具体的なコマンド例も多数紹介しており、実務ですぐに役立つ知識を習得できます。
hping3とは
hping3は、TCP/IPパケットの作成・送信・解析が可能な高機能なパケット生成ツールです。ファイアウォールやIDS/IPSの挙動確認、ポートスキャン、DoS耐性テストなど、幅広い場面で利用されています。
hping公式サイト(GitHub):https://github.com/antirez/hping
一般的なpingコマンドがICMPプロトコルのみ動作するのに対し、hping3はTCP、UDP、ICMP、RAW IPといった複数のプロトコルを扱うことができ、送信元ポート・宛先ポート・フラグビット・ペイロードなどを自由にカスタマイズ可能です。
- ファイアウォールやIDS/IPSの動作検証
- SYNスキャン、FINスキャンなどによるポートスキャン
- ネットワーク到達性・遅延・パケットロスの診断
- 任意のフラグやペイロードを持つパケットの送信テスト
- DoS攻撃のシミュレーション・耐性評価
hpingとhping3の違い
hping(初代hping)は TCP/IPプロトコル用のパケット生成・解析ツールとして1990年代にリリースされましたが、その機能は限定的でした。また、hpingは古いOS環境では動作するものの、近年のOSでは依存ライブラリの問題やコンパイルエラーによって正常に動作しないケースが多く見られます。
一方、hping3はhpingの後継として開発され、より柔軟かつ詳細なパケット生成が可能です。例えば、TCPヘッダにある任意のフラグ(SYN、ACK、FIN、URG、RSTなど)を細かく制御でき、複雑なスキャン手法やファイアウォールの挙動分析にも対応できます。
- hping3は、hpingの後継として開発されました。
- 現在はhping3が主流で、「hping」という名称は、一般的にhping3を指しています。
hping3の使い方
hping3を用いたパケット送信は、許可された環境でのみ実施することが前提です。実際のネットワークに対して、無許可でhping3を使用することは、たとえ被害がなくても不正アクセス禁止法に抵触する恐れがあります。必ず許可を得た環境でのみ実施してください。
hping3をインストールする
hping3は多機能なパケット生成・送信ツールであり、セキュリティ診断やネットワークのトラブルシューティングに欠かせない存在です。ここでは、Linux環境におけるhping3のインストール方法を、代表的なディストリビューション別に解説します。
Kali Linuxの場合
ペネトレーションテストに特化したディストリビューション〝Kali Linux〟には、多くのセキュリティツールがプリインストールされており、hping3もその中に含まれています。
Kali Linux 2025.1
$ which hping3
/usr/sbin/hping3
$ hping3 -v
hping3 version 3.0.0-alpha-2 ($Id: release.h,v 1.4 2004/04/09 23:38:56 antirez Exp $)
This binary is TCL scripting capable
Ubuntuの場合
UbuntuなどのDebian系ディストリビューションでは、公式のパッケージリポジトリにhping3が含まれているため、apt
コマンドでインストールが可能です。
Ubuntu Server 24.04
$ sudo apt update
$ sudo apt show hping3
Package: hping3
Version: 3.a2.ds2-10build2
Priority: optional
Section: universe/net
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Marcio de Souza Oliveira <marciosouza@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 237 kB
Depends: libc6 (>= 2.38), libpcap0.8t64 (>= 0.9.8), libtcl8.6 (>= 8.6.0)
Homepage: http://www.hping.org/
Download-Size: 100.0 kB
APT-Sources: http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages
Description: Active Network Smashing Tool
hping3 is a network tool able to send custom ICMP/UDP/TCP packets and
to display target replies like ping does with ICMP replies. It handles
fragmentation and arbitrary packet body and size, and can be used to
transfer files under supported protocols. Using hping3, you can test
firewall rules, perform (spoofed) port scanning, test network
performance using different protocols, do path MTU discovery, perform
traceroute-like actions under different protocols, fingerprint remote
operating systems, audit TCP/IP stacks, etc. hping3 is scriptable
using the Tcl language.
$ sudo apt install hping3
このコマンドを実行することで、依存関係を含めた必要なパッケージが自動で解決され、hping3がインストールされます。
AlmaLinux、Rocky Linuxの場合
AlmaLinuxやRocky LinuxなどのRHEL系ディストリビューションでは、hping3をインストールする前に、EPEL(Extra Packages for Enterprise Linux)リポジトリの追加が必要です。(標準リポジトリには、hping3は含まれていません。)
AlmaLinux 9.5
# dnf -y install epel-release
# dnf info hping3
利用可能なパッケージ
名前 : hping3
バージョン : 0.0.20051105
リリース : 41.el9
Arch : x86_64
サイズ : 93 k
ソース : hping3-0.0.20051105-41.el9.src.rpm
リポジトリー : epel
概要 : TCP/IP stack auditing and much more
URL : http://www.hping.org/
ライセンス : GPLv2
説明 : hping3 is a network tool able to send custom TCP/IP packets and to
: display target replies like ping do with ICMP replies. hping3 can handle
: fragmentation, and almost arbitrary packet size and content, using the
: command line interface.
: Since version 3, hping implements scripting capabilties
# dnf -y install hping3
hping3を実行する
基本コマンド
$ sudo hping3 [オプション] [ターゲットホスト]
hping3を実行する際、rootユーザー
、またはsudo権限
が必要です。一般ユーザーで実行すると、権限エラーになります。
例)一般ユーザーで実行した場合
$ hping3 192.168.10.105
[open_sockraw] socket(): Operation not permitted
[main] can't open raw socket
hping3はコマンドラインベースで動作し、最も基本的な使用方法はhping3 [ターゲットホスト]
という形式です。この場合、ICMPではなく、TCPパケットがデフォルトポート0
に送信されます。
$ sudo hping3 [ターゲットホスト]
例)192.168.1.1のTCPポート0にパケットを送信
$ sudo hping3 192.168.1.1
宛先ポートを明示的に指定する場合は、-p
オプションを使用します。
$ sudo hping3 -p [ポート番号] [ターゲットホスト]
例)192.168.1.1のTCPポート80にSYNパケットを送信
$ sudo hping3 -S -p 80 192.168.1.1
-S
:SYNフラグを設定-p
:宛先ポートを指定
オプション一覧
hping3は多機能で柔軟性に富んでおり、多岐にわたるオプションを利用できます。
基本オプション
オプション | 説明 |
---|---|
-h , --help | ヘルプを表示 |
-v , --version | バージョン情報を表示 |
-c , --count | 送信するパケット数 |
-i , --interval | パケット送信の間隔(デフォルト:1秒間隔) 例) -i 5 :5秒間隔、-i u5 :5マイクロ秒間隔 |
--fast | -i u10000 と同じ(1秒に10パケット) |
--faster | -i u1000 と同じ(1秒に100パケット) |
--flood | 最大速度でパケット送信、応答を表示しない |
-n , --numeric | 名前解決しない |
-q , --quiet | 静音モード(送信したパケットに対する応答を表示せず、統計情報だけを表示する) |
-I , --interface | 送信側のインタフェース名(指定しない場合、自動的に送信先IPアドレスにルーティングされる経路上のインタフェースを選択) |
-V , --verbose | 詳細モード |
-D , --debug | デバッグ情報を表示 |
-z , --bind | Ctrl+ZをTTLにバインド(デフォルト:宛先ポート) |
-Z , --unbind | Ctrl+Z のバインドを解除 |
--beep | 一致したパケットを受信するたびにビープ音 |
モード指定
オプション | 説明 |
---|---|
(デフォルト) | TCPモード |
-0 , --rawip | RAW IP モード |
-1 , --icmp | ICMP モード |
-2 , --udp | UDP モード |
-8 , --scan | スキャンモード 例)hping3 --scan 1-30,70-90 -S example.com |
-9 , --listen | リッスンモード |
IP関連
オプション | 説明 |
---|---|
-a , --spoof | 送信元IPアドレスを指定(偽装) |
--rand-dest | 宛先IPアドレスをランダムにする |
--rand-source | 送信元IPアドレスをランダムにする |
-t , --ttl | TTLを指定(デフォルト:64) |
-N , --id | IDを指定(デフォルト:ランダム) |
-W , --winid | Windows互換のIDバイト順 |
-r , --rel | IDを相対値で送信(トラフィック推定に使用) |
-f , --frag | パケットを分割送信 |
-x , --morefrag | More Fragmentsフラグを設定 |
-y , --dontfrag | Don't Fragmentフラグを設定 |
-g , --fragoff | フラグメントオフセットを指定 |
-m , --mtu | 仮想MTUを指定(サイズがMTUを超えるとパケットを分割) |
-o , --tos | サービス種別を指定(デフォルト:0x00) |
-G , --rroute | RECORD_ROUTEオプションを追加し、ルートバッファを表示 |
--lsrr | 緩いソースルーティング&経路記録 |
--ssrr | 厳格なソースルーティング&経路記録 |
-H , --ipproto | IPプロトコルフィールドを指定(RAW IPモードのみ) |
ICMP関連
オプション | 説明 |
---|---|
-C , --icmptype | ICMPタイプ(デフォルト:エコー要求) |
-K , --icmpcode | ICMPコード(デフォルト:0) |
--force-icmp | すべてICMPタイプを送信(デフォルト:サポートしているタイプのみ送信) |
--icmp-gw | ICMPリダイレクト用のゲートウェイアドレスを設定(デフォルト:0.0.0.0) |
--icmp-ts | ICMPタイムスタンプ(--icmptype 13) |
--icmp-addr | ICMPアドレスマスク(--icmptype 17) |
--icmp-help | ICMPオプションのヘルプを表示 |
TCP/UDP関連
オプション | 説明 |
---|---|
-s , --baseport | 送信元ポート(デフォルト:ランダム) |
-p , --destport | 宛先ポート(デフォルト:0) |
-k , --keep | 送信元ポートを固定 |
-w , --win | ウィンドウサイズ指定(デフォルト:64) |
-O , --tcpoff | TCPオフセットを偽装 |
-Q , --seqnum | TCPシーケンス番号のみを表示 |
-b , --badcksum | 不正なチェックサムを送信(OSにより補正される可能性) |
-M , --setseq | TCPシーケンス番号を指定 |
-L , --setack | TCP ACK番号を指定 |
-F , --fin | FINフラグを設定 |
-S , --syn | SYNフラグを設定 |
-R , --rst | RSTフラグを設定 |
-P , --push | PUSHフラグを設定 |
-A , --ack | ACKフラグを設定 |
-U , --urg | URGフラグを設定 |
-X , --xmas | X未使用フラグ(0x40)を設定 |
-Y , --ymas | Y未使用フラグ(0x80)を設定 |
--tcpexitcode | 最後のTCPフラグを終了コードとして使用 |
--tcp-mss | 指定された値でTCP MSSオプションを有効にする |
--tcp-timestamp | タイムスタンプを使用しHZ/稼働時間を推定 |
一般オプション
オプション | 説明 |
---|---|
-d , --data | データサイズ(デフォルト:0) |
-E , --file | ファイルからデータ読み込み |
-e , --sign | 署名を追加 |
-j , --dump | パケットを16進数でダンプ |
-J , --print | 表示可能な文字のみダンプ |
-B , --safe | セーフプロトコルを有効化 |
-u , --end | ファイルEOFで終了(巻き戻さない) |
-T , --traceroute | tracerouteモード(--bind および--ttl 1 が自動有効) |
--tr-stop | 最初のICMP以外のパケットを受信したら終了 |
--tr-keep-ttl | 送信元TTLを固定 |
--tr-no-rtt | RTT(ラウンドトリップタイム)を計算/表示しない |
ARS packet description(APD)関連オプション
オプション | 説明 |
---|---|
--apd-send | APD(ARS Packet Description)形式で記述されたパケットを送信 |
この記事で使用する検証環境
検証に使用したシステム構成
項目 | 送信側(hping3実行マシン) | 受信側(ターゲットマシン) |
---|---|---|
OS | Kali Linux 2025.1 | Ubuntu Server 24.04 |
IPアドレス | 192.168.10.11 | 192.168.10.102 |
ミドルウェア | hping3 version 3.0.0-alpha-2 | tcpdump 4.99.4 |
Kali Linux、およびUbuntu Serverは、Windows環境(192.168.10.1)上のVirtualBoxを利用して、仮想マシンとして構築しています。
- 送信側:Kali Linux(192.168.10.11)
- hping3を使ってパケット送信
- 受信側:Ubuntu Server(192.168.10.102)
- tcpdumpを使ってパケットキャプチャ
仮想環境のネットワーク設定
仮想ネットワークはホストオンリーアダプターを採用し、両仮想マシンが同一セグメント内で直接通信可能な構成です。この構成により、ネットワーク経路の影響を最小限に抑えつつ、hping3を用いた送受信パケットの挙動を正確に観測できます。
受信側(Ubuntu Server)の設定
ファイアウォールを無効化
Ubuntu Server(受信側)のファイアウォールを無効化し、フィルタリングの影響を受けない状態で検証を実施しています。
$ sudo systemctl stop ufw.service
hping3のトラフィックをキャプチャする
hping3の挙動を正確に把握するため、受信側でtcpdumpを用いてパケットをキャプチャし、通信内容を可視化しています。tcpdumpの出力結果には、送信元IPアドレスや宛先IPアドレス、ポート番号、TCPフラグ、シーケンス番号などが表示されます。

オプションの具体的な使用例
hping3は多機能なパケット生成ツールであり、用途に応じてオプションを組み合わせることで、柔軟な通信テストが可能です。
ここでは、実務において頻繁に使用される代表的なケースを取り上げ、具体的なオプションの使い方と、受信側で取得したパケットキャプチャ結果について解説します。
なお、ここで解説している使用例を、許可のない環境で実行することは絶対におやめください。無許可のスキャンや疑似攻撃はサイバー攻撃と見なされ、法的責任が問われる可能性があります。
パケットの送信回数を指定(-c、--count)
Kali Linux(送信側)
$ sudo hping3 -c 3 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=7.7 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=7.8 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=0 flags=RA seq=2 win=0 rtt=7.7 ms
-c
: パケットの送信回数
Ubuntu Server(受信側)
$ sudo tcpdump -n -q -i enp0s8 not host 192.168.10.1
15:11:46.957522 IP 192.168.10.11.1206 > 192.168.10.102.0: tcp 0
15:11:46.957546 IP 192.168.10.102.0 > 192.168.10.11.1206: tcp 0
15:11:47.957725 IP 192.168.10.11.1207 > 192.168.10.102.0: tcp 0
15:11:47.957760 IP 192.168.10.102.0 > 192.168.10.11.1207: tcp 0
15:11:48.958091 IP 192.168.10.11.1208 > 192.168.10.102.0: tcp 0
15:11:48.958125 IP 192.168.10.102.0 > 192.168.10.11.1208: tcp 0
-n
:名前解決しない-q
:出力内容を簡素化-i enp0s8
:キャプチャするネットワークインタフェースnot host 192.168.10.1
:Windowsホストとの通信を除外
TCPパケットを192.168.10.11から3回受信したことを確認できます。
宛先ポートを指定(-p、--destport)
単一指定
Kali Linux(送信側)
$ sudo hping3 -c 3 -p 21 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=0 win=0 rtt=3.6 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=1 win=0 rtt=6.1 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=2 win=0 rtt=5.9 ms
-p
: スキャン対象のポートを指定
Ubuntu Server(受信側)
$ sudo tcpdump -n -q -i enp0s8 not host 192.168.10.1
15:13:47.587283 IP 192.168.10.11.2789 > 192.168.10.102.21: tcp 0
15:13:47.587309 IP 192.168.10.102.21 > 192.168.10.11.2789: tcp 0
15:13:48.587449 IP 192.168.10.11.2790 > 192.168.10.102.21: tcp 0
15:13:48.587473 IP 192.168.10.102.21 > 192.168.10.11.2790: tcp 0
15:13:49.587485 IP 192.168.10.11.2791 > 192.168.10.102.21: tcp 0
15:13:49.587516 IP 192.168.10.102.21 > 192.168.10.11.2791: tcp 0
TCPパケットがポート21に届いていることを確認できます。
連続指定
Kali Linux(送信側)
$ sudo hping3 -c 3 -p ++11 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=11 flags=RA seq=0 win=0 rtt=8.3 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=12 flags=RA seq=1 win=0 rtt=8.8 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=13 flags=RA seq=2 win=0 rtt=6.7 ms
宛先ポートの前に+
文字を付けた場合、ポート番号をインクリメントしながらスキャンします。
+
文字を1つ付けた場合(例:+80
):応答を受信するたびに宛先ポート番号を+1する。+
文字を2つ付けた場合(例:++80
):パケットを送信するたびに宛先ポート番号を+1する。
Ubuntu Server(受信側)
$ sudo tcpdump -n -q -i enp0s8 not host 192.168.10.1
15:15:14.173687 IP 192.168.10.11.2831 > 192.168.10.102.11: tcp 0
15:15:14.173718 IP 192.168.10.102.11 > 192.168.10.11.2831: tcp 0
15:15:15.174216 IP 192.168.10.11.2832 > 192.168.10.102.12: tcp 0
15:15:15.174272 IP 192.168.10.102.12 > 192.168.10.11.2832: tcp 0
15:15:16.174889 IP 192.168.10.11.2833 > 192.168.10.102.13: tcp 0
15:15:16.174925 IP 192.168.10.102.13 > 192.168.10.11.2833: tcp 0
TCPポート11から13まで、連続してパケットを受信していることを確認できます。
ICMPエコーリクエストの送信(-1、--icmp)
Kali Linux(送信側)
$ sudo hping3 -1 -c 3 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 id=21725 icmp_seq=0 rtt=3.7 ms
len=46 ip=192.168.10.102 ttl=64 id=22343 icmp_seq=1 rtt=9.8 ms
len=46 ip=192.168.10.102 ttl=64 id=23073 icmp_seq=2 rtt=8.8 ms
-1
:ICMPモード
ping
コマンドとは異なり、ICMPタイプやICMPコードを指定することも可能で、より高度な診断が行えます。
Ubuntu Server(受信側)
$ sudo tcpdump -n -q -i enp0s8 not host 192.168.10.1
15:17:17.990609 IP 192.168.10.11 > 192.168.10.102: ICMP echo request, id 20011, seq 0, length 8
15:17:17.990638 IP 192.168.10.102 > 192.168.10.11: ICMP echo reply, id 20011, seq 0, length 8
15:17:18.991911 IP 192.168.10.11 > 192.168.10.102: ICMP echo request, id 20011, seq 256, length 8
15:17:18.991934 IP 192.168.10.102 > 192.168.10.11: ICMP echo reply, id 20011, seq 256, length 8
15:17:19.993636 IP 192.168.10.11 > 192.168.10.102: ICMP echo request, id 20011, seq 512, length 8
15:17:19.993672 IP 192.168.10.102 > 192.168.10.11: ICMP echo reply, id 20011, seq 512, length 8
1秒間隔でICMPエコーリクエストを受信していることが確認できます。
UDPスキャン(-2、--udp)
Kali Linux(送信側)
$ sudo hping3 -2 -c 3 -p 53 192.168.10.102
ICMP Port Unreachable from ip=192.168.10.102 name=Ubuntu-Server
status=0 port=1705 seq=0
ICMP Port Unreachable from ip=192.168.10.102 name=Ubuntu-Server
status=0 port=1706 seq=1
ICMP Port Unreachable from ip=192.168.10.102 name=Ubuntu-Server
status=0 port=1707 seq=2
-2
: UDPパケットを送信
ターゲットホストの53番ポートに対して、UDPパケットを送信します。
Ubuntu Server(受信側)
$ sudo tcpdump -n -q -i enp0s8 not host 192.168.10.1
15:18:44.058337 IP 192.168.10.11.1705 > 192.168.10.102.53: UDP, length 0
15:18:44.058367 IP 192.168.10.102 > 192.168.10.11: ICMP 192.168.10.102 udp port 53 unreachable, length 36
15:18:45.058796 IP 192.168.10.11.1706 > 192.168.10.102.53: UDP, length 0
15:18:45.058823 IP 192.168.10.102 > 192.168.10.11: ICMP 192.168.10.102 udp port 53 unreachable, length 36
15:18:46.059100 IP 192.168.10.11.1707 > 192.168.10.102.53: UDP, length 0
15:18:46.059140 IP 192.168.10.102 > 192.168.10.11: ICMP 192.168.10.102 udp port 53 unreachable, length 36
UDPポート53に受信していることを確認できます。
SYNスキャン(-S、--syn)
Kali Linux(送信側)
$ sudo hping3 -S -c 3 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=0 flags=RA seq=0 win=0 rtt=7.4 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=0 flags=RA seq=1 win=0 rtt=2.9 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=0 flags=RA seq=2 win=0 rtt=5.7 ms
-S
:SYNフラグをセット
ターゲットホストのTCPポートに対して、SYNパケットを送信します。ファイアウォールでICMPをブロックしている環境では、通常のpingは使えませんが、hping3ではTCPパケットを用いてホストの生存確認ができます。
Ubuntu Server(受信側)
$ sudo tcpdump -n -i enp0s8 not host 192.168.10.1
15:22:43.251582 IP 192.168.10.11.1563 > 192.168.10.102.0: Flags [S], seq 252819517, win 512, length 0
15:22:43.251607 IP 192.168.10.102.0 > 192.168.10.11.1563: Flags [R.], seq 0, ack 252819518, win 0, length 0
15:22:44.252312 IP 192.168.10.11.1564 > 192.168.10.102.0: Flags [S], seq 1754587087, win 512, length 0
15:22:44.252357 IP 192.168.10.102.0 > 192.168.10.11.1564: Flags [R.], seq 0, ack 1754587088, win 0, length 0
15:22:45.253368 IP 192.168.10.11.1565 > 192.168.10.102.0: Flags [S], seq 2048343376, win 512, length 0
15:22:45.253405 IP 192.168.10.102.0 > 192.168.10.11.1565: Flags [R.], seq 0, ack 2048343377, win 0, length 0
SYNパケットを受信していることが確認できます。
ACKスキャン(-A、--ack)
Kali Linux(送信側)
$ sudo hping3 -A -c 3 -p 80 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=R seq=0 win=0 rtt=4.0 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=R seq=1 win=0 rtt=7.8 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=R seq=2 win=0 rtt=2.1 ms
-A
:ACKフラグをセット
ターゲットのTCPポート80に対して、ACKパケットを送信します。
Ubuntu Server(受信側)
$ sudo tcpdump -n -i enp0s8 not host 192.168.10.1
16:03:15.230958 IP 192.168.10.11.1364 > 192.168.10.102.80: Flags [.], ack 1891559746, win 512, length 0
16:03:15.230993 IP 192.168.10.102.80 > 192.168.10.11.1364: Flags [R], seq 1891559746, win 0, length 0
16:03:16.232026 IP 192.168.10.11.1365 > 192.168.10.102.80: Flags [.], ack 1498912230, win 512, length 0
16:03:16.232064 IP 192.168.10.102.80 > 192.168.10.11.1365: Flags [R], seq 1498912230, win 0, length 0
16:03:17.232345 IP 192.168.10.11.1366 > 192.168.10.102.80: Flags [.], ack 2080690095, win 512, length 0
16:03:17.232372 IP 192.168.10.102.80 > 192.168.10.11.1366: Flags [R], seq 2080690095, win 0, length 0
ACKパケットを受信していることが確認できます。
FINスキャン(-F、--fin)
Kali Linux(送信側)
$ sudo hping3 -F -c 3 -p 21 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=0 win=0 rtt=7.6 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=1 win=0 rtt=4.1 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=2 win=0 rtt=7.0 ms
-F
:FINフラグをセット
ターゲットホストのTCPポート21に対して、FINパケットを送信します。
Ubuntu Server(受信側)
$ sudo tcpdump -n -i enp0s8 not host 192.168.10.1
16:04:35.191218 IP 192.168.10.11.2711 > 192.168.10.102.21: Flags [F], seq 571245161, win 512, length 0
16:04:35.191268 IP 192.168.10.102.21 > 192.168.10.11.2711: Flags [R.], seq 0, ack 571245162, win 0, length 0
16:04:36.191428 IP 192.168.10.11.2712 > 192.168.10.102.21: Flags [F], seq 1288255585, win 512, length 0
16:04:36.191453 IP 192.168.10.102.21 > 192.168.10.11.2712: Flags [R.], seq 0, ack 1288255586, win 0, length 0
16:04:37.191626 IP 192.168.10.11.2713 > 192.168.10.102.21: Flags [F], seq 1198335680, win 512, length 0
16:04:37.191660 IP 192.168.10.102.21 > 192.168.10.11.2713: Flags [R.], seq 0, ack 1198335681, win 0, length 0
FINパケットを受信していることが確認できます。
複数のTCPフラグを組み合わせることも可能です。
Kali Linux(送信側)
例)SYNフラグ、FINフラグをセット
$ sudo hping3 -S -F -c 3 -p 21 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=0 win=0 rtt=3.7 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=1 win=0 rtt=6.9 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=21 flags=RA seq=2 win=0 rtt=7.9 ms
Ubuntu Server(受信側)
$ sudo tcpdump -n -i enp0s8 not host 192.168.10.1
16:06:47.083975 IP 192.168.10.11.2608 > 192.168.10.102.21: Flags [FS], seq 1713715951, win 512, length 0
16:06:47.084000 IP 192.168.10.102.21 > 192.168.10.11.2608: Flags [R.], seq 0, ack 1713715953, win 0, length 0
16:06:48.084686 IP 192.168.10.11.2609 > 192.168.10.102.21: Flags [FS], seq 1930334851, win 512, length 0
16:06:48.084721 IP 192.168.10.102.21 > 192.168.10.11.2609: Flags [R.], seq 0, ack 1930334853, win 0, length 0
16:06:49.087102 IP 192.168.10.11.2610 > 192.168.10.102.21: Flags [FS], seq 1094807547, win 512, length 0
16:06:49.087137 IP 192.168.10.102.21 > 192.168.10.11.2610: Flags [R.], seq 0, ack 1094807549, win 0, length 0
ポートスキャン(-8、--scan)
Kali Linux(送信側)
$ sudo hping3 -8 80-85 -S 192.168.10.102
Scanning 192.168.10.102 (192.168.10.102), port 80-85
6 ports to scan, use -V to see all the replies
+----+-----------+---------+---+-----+-----+-----+
|port| serv name | flags |ttl| id | win | len |
+----+-----------+---------+---+-----+-----+-----+
80 http : .S..A... 64 0 64240 46
All replies received. Done.
Not responding ports:
-8
:ポートスキャンを実行
スキャンモードで対象のTCPポート(80-85)をSYNスキャンし、どのポートが開いているか一覧取得します。

送信間隔を指定(-i、--interval)
Kali Linux(送信側)
$ sudo hping3 -S -i u100000 -p 80 192.168.10.102
デフォルトでは1秒ごとに1パケットを送信しますが、-i
オプションを使って、送信間隔を指定できます。
-i 5
:5秒ごとに送信-i u1000
:1ミリ秒(1000マイクロ秒)ごとに送信-i u100000
:100ミリ秒ごとに送信
また、--fast
、--faster
オプションを使って、送信間隔を指定することもできます。
--fast
:-i u10000
と同じ(1秒に10パケット)--faster
:-i u1000
と同じ(1秒に100パケット)
送信元IPアドレスの指定(-a、--spoof)
Kali Linux(送信側)
$ sudo hping3 -S -c 1 -a 10.0.0.1 -p 80 192.168.10.102
-a
:送信元IPアドレスを指定
送信元IPアドレスを偽装して、SYNパケットを送信します。
Ubuntu Server(受信側)
$ sudo tcpdump -n -q -i enp0s8 not host 192.168.10.1
17:13:01.167330 IP 10.0.0.1.1764 > 192.168.10.102.80: tcp 0
17:13:01.167356 IP 192.168.10.102.80 > 10.0.0.1.1764: tcp 0
偽装したIPアドレス10.0.0.1
から受信したことを確認できます。
送信元ポートを指定(-s、--baseport)
Kali Linux(送信側)
$ sudo hping3 -S -c 5 -s 10000 -p 80 192.168.10.102
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=64240 rtt=8.5 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=1 win=64240 rtt=3.9 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=2 win=64240 rtt=7.9 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=3 win=64240 rtt=4.9 ms
len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=4 win=64240 rtt=6.9 ms
-s
:送信元ポートを指定
送信元ポートを指定して、SYNスキャンを行います。
Ubuntu Server(受信側)
$ sudo tcpdump -n -q -i enp0s8 not host 192.168.10.1
17:17:33.475024 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:17:33.475057 IP 192.168.10.102.80 > 192.168.10.11.10000: tcp 0
17:17:33.475485 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:17:34.474939 IP 192.168.10.11.10001 > 192.168.10.102.80: tcp 0
17:17:34.474979 IP 192.168.10.102.80 > 192.168.10.11.10001: tcp 0
17:17:34.475479 IP 192.168.10.11.10001 > 192.168.10.102.80: tcp 0
17:17:35.475053 IP 192.168.10.11.10002 > 192.168.10.102.80: tcp 0
17:17:35.475096 IP 192.168.10.102.80 > 192.168.10.11.10002: tcp 0
17:17:35.475625 IP 192.168.10.11.10002 > 192.168.10.102.80: tcp 0
17:17:36.474786 IP 192.168.10.11.10003 > 192.168.10.102.80: tcp 0
17:17:36.474872 IP 192.168.10.102.80 > 192.168.10.11.10003: tcp 0
17:17:36.475322 IP 192.168.10.11.10003 > 192.168.10.102.80: tcp 0
17:17:37.474454 IP 192.168.10.11.10004 > 192.168.10.102.80: tcp 0
17:17:37.474492 IP 192.168.10.102.80 > 192.168.10.11.10004: tcp 0
17:17:37.474939 IP 192.168.10.11.10004 > 192.168.10.102.80: tcp 0
指定したポート番号10000
から順にインクリメントしていることを確認できます。
-k
、--keep
オプションを指定することにより、送信元ポートを固定することができます。
Kali Linux(送信側)
$ sudo hping3 -S -c 5 -s 10000 -k -p 80 192.168.10.102
DUP! len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=64240 rtt=1003.7 ms
DUP! len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=64240 rtt=2007.5 ms
DUP! len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=64240 rtt=3004.5 ms
DUP! len=46 ip=192.168.10.102 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=64240 rtt=4009.4 ms
-k
:送信元ポートを固定
Ubuntu Server(受信側)
$ sudo tcpdump -n -q -i enp0s8 not host 192.168.10.1
17:21:58.051536 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:21:58.051565 IP 192.168.10.102.80 > 192.168.10.11.10000: tcp 0
17:21:58.051943 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:21:59.051700 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:21:59.051742 IP 192.168.10.102.80 > 192.168.10.11.10000: tcp 0
17:21:59.052196 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:22:00.052215 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:22:00.052258 IP 192.168.10.102.80 > 192.168.10.11.10000: tcp 0
17:22:00.052801 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:22:01.052454 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:22:01.052492 IP 192.168.10.102.80 > 192.168.10.11.10000: tcp 0
17:22:01.052960 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:22:02.052155 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
17:22:02.052198 IP 192.168.10.102.80 > 192.168.10.11.10000: tcp 0
17:22:02.052784 IP 192.168.10.11.10000 > 192.168.10.102.80: tcp 0
送信元ポートが10000
に固定されていることを確認できます。
DoS/DDoS攻撃の耐性評価(--flood)
hping3は簡易的なDoS耐性評価にも利用できます。例えば、hping3 -S --flood -p 80 [ターゲットホスト]
を実行することで、ポート80に向けて大量のSYNパケットを送信し、サーバーやネットワーク機器が高負荷時にどう動作するかを検証できます。
--rand-source
オプションを指定することで、送信元IPアドレスをランダム化でき、DDoS攻撃を模した負荷テストに用いることも可能です。
SYNフラッド攻撃(TCP SYN flood attack)
Kali Linux(送信側)
$ sudo hping3 -S --flood -p 80 192.168.10.102
--flood
:高速パケット送信
UDPフラッド攻撃(UDP flood attack)
Kali Linux(送信側)
$ sudo hping3 -2 --flood -p 53 192.168.10.102
--flood
:高速パケット送信
ICMPフラッド攻撃(ICMP flood attack)
Kali Linux(送信側)
$ sudo hping3 -1 --flood 192.168.10.102
--flood
:高速パケット送信
経済産業省 商務情報政策局 サイバーセキュリティ課 :
機器のサイバーセキュリティ確保のためのセキュリティ検証の手引き(別冊1 脅威分析及びセキュリティ検証の詳細解説書)