ICMPではなくTCPを使って対象ポートへの接続可否を確認できるネットワーク調査ツール
- paping -
papingは、指定したホストのTCPポートに接続できるかを確認できる便利なツールです。一般的なpingとは確認できる内容が異なるため、ネットワークやサーバーのトラブルシューティングにも活用できます。
本記事では、papingとはどのようなツールなのか、pingと何が違うのかを整理したうえで、ダウンロード・インストール方法やpapingコマンドの使い方を解説します。さらに、正常時だけでなく、ポートが閉じている場合や名前解決に失敗した場合など、さまざまなケースで実際にpapingを実行した結果も掲載しています。
この記事を読むことで、pingとpapingを状況に応じて使い分け、ネットワークの疎通状況をより詳しく確認できるようになります。
papingとは
papingは、指定したホストのTCPポートに対して接続確認を行うためのコマンドラインツールです。
一般的なpingは、主にICMPを使用して対象ホストとの疎通を確認します。一方、papingではポート番号を指定して接続を試行できるため、「ホストに到達できるか」だけでなく、「特定のポートへの接続が成立するか」を確認できます。
セキュリティ上の観点から、ICMPによる通信を制限している環境も少なくありません。「pingが通らない = 対象ホストへ通信できない」と早合点しないためにも、TCPベースで到達性を確認する手段を持っておく価値は高いと言えます。
主な特長
- TCPポート単位の接続確認ができる
- IPv4およびIPv6に対応
- TCP接続確立時間を測定できる
- 接続成功数や失敗数などの統計情報を表示する
- クロスプラットフォーム(Windows、Linux、macOSに対応)
- ARMアーキテクチャに対応
- C++で実装されており、軽量かつ高速
特に重要なのが、特定のポートを指定して疎通確認できる点です。ネットワーク機器や接続先ホストの設定によってICMP通信が制限されている環境でも、TCPによるサービスへの接続は可能な場合があります。
また、papingはクロスプラットフォームに対応しており、Windows、Linux、macOS、およびARMアーキテクチャをネイティブにサポートします。単一の実行ファイルで動作し、インストーラーやランタイムを必要としない点は、実行環境を汚さずに済むという意味でも実務的なメリットです。
papingの歴史
オリジナル版papingは、Mike Lovell氏が開発したTCPポート疎通確認ツールです。初期リリース(v1.0.0)が2010年に公開され、2011年にv1.5.5がリリースされました。当初はGoogle Codeで公開していましたが、2016年のGoogle Codeのサービス終了に伴いソースコードはGitHubへ移行しました。現在はメンテナンスを終了しており、アーカイブとして管理されています。
2024年にOliver Kryński氏による暫定的な修正版「Paping-fixed」が公開されましたが、これも現在はアーカイブ扱いとなっています。
こうした経緯を受けて登場したのが、本記事で扱う「Paping-NG」です。オリジナル版papingの思想を継承する後継ツールで、現在のOSやCPUアーキテクチャに対応するよう設計されています。
一般的なpingとの違い
papingとpingでは、「確認できる範囲」と「使用するプロトコル」が異なります。
| 比較項目 | ping | paping |
|---|---|---|
| 確認対象 | ホストへの到達性 | 指定したポートへの接続 |
| プロトコル | ICMP | TCP |
| OSI階層 | ネットワーク層(L3) | トランスポート層(L4) |
| 対象の粒度 | ホスト単位 | ホスト+ポート単位 |
| ポート指定 | 不可 | 必須(-p) |
| 測定できる時間 | RTT(往復応答時間) | TCP接続確立時間 |
一般的なpingは、主にICMP Echo Requestを宛先へ送信し、ICMP Echo Replyが返ってくるかを確認します。対象ホストと通信できるかを確認する用途に適しています。一方、papingではTCPを利用して、指定したポートへの通信が成立するかを確認します。例えば、WebサーバーのTCP/443を指定することで、当該ポートへのTCPコネクションが確立できるかを確認します。
papingのダウンロード
papingは公式GitHubリポジトリにて、GPL-3.0ライセンスの下で「ビルド済みバイナリ」と「ソースコード」が公開されています。
公式GitHubのReleasesページ:https://github.com/arch3rek/Paping-NG/releases
2026年8月10日時点では、v1.0.3が最新リリースです。同バージョンでは、大量のTCPプローブ実行時に発生し得るバッファオーバーフローが修正され、Windows環境におけるWinsockのディスクリプタ上限の扱いも見直されています。過去のバージョンを利用する特別な理由がなければ、最新版を選択してください。
ダウンロード可能なビルド済みバイナリ
| 実行環境 | ファイル名 |
|---|---|
| Windows (x86-64) | paping-windows-amd64.exe |
| Linux (x86-64) | paping-linux-amd64 |
| macOS (Intel) | paping-macos-amd64 |
| macOS (Apple Silicon) | paping-macos-arm64 |
papingは古くから流通しているツールであるため、出所不明のバイナリがインターネット上に数多く存在します。必ず公式GitHubリポジトリのReleasesページから取得して下さい。
またGitHubのReleasesページでは、上記のバイナリに加えてソースコードも配布しています。CMakeおよびC++20に対応したコンパイラ(GCC / Clang / MSVC)があれば、ソースコードからビルドできます。
papingのインストール
papingのビルド済みバイナリは、各プラットフォーム向けに自己完結型の実行ファイルとして提供されています。単一の実行ファイルで動作し、ランタイムの依存関係もありません。
したがって「インストール」といっても、実体はビルド済みバイナリをPATHの通ったディレクトリに置くだけです。
Linux/macOSの場合
LinuxおよびmacOSでは、ダウンロードしたビルド済みバイナリをpapingへリネームし、実行権限を付与したうえでPATHの通ったディレクトリへ配置します。
ここでは、Linux(AMD64)向けバイナリであるpaping-linux-amd64を例に取り上げます。
実行環境に適したビルド済みバイナリをダウンロードする
$ curl -L -O https://github.com/arch3rek/Paping-NG/releases/download/v1.0.3/paping-linux-amd64-L:リダイレクトを追跡する-O:URL末尾のファイル名で保存する
上記コマンドでは、2026年8月10日時点の最新バージョン(1.0.3)を指定しています。
バイナリファイルを「paping」にリネームする
$ mv paping-linux-amd64 paping実行権限を付与する
$ chmod +x paping「/usr/local/bin」へ配置する
$ sudo mv paping /usr/local/bin/インストール後の確認
# 実行パス
$ command -v paping
/usr/local/bin/paping
# ヘルプ情報
$ paping -h
Paping-NG v1.0.3 - Copyright (c) 2026 Oliver (arch3r.eu)
Usage: paping <host> -p <port> [options]
Options:
-p, --port N TCP port to probe (required)
-c, --count N stop after N probes (default: run forever)
-t, --timeout N connection timeout in ms (default: 1000)
-h, --help show this helpヘルプが表示されれば、インストール完了です。
本記事の検証環境において、以下のLinuxディストリビューションで動作確認済みです。
- Debian系:Kali Linux 2026.2、Ubuntu 26.04 LTS
- RHEL系:AlmaLinux 10.2
Windowsの場合
ダウンロードしたpaping-windows-amd64.exeをpaping.exeへリネームし、PATHの通ったディレクトリへ配置します。
コマンドが認識されない場合は、次の点を確認してください。
paping.exeが指定したディレクトリに存在するかpaping.exe.exeなど、拡張子が重複していないか- バイナリを配置したディレクトリが環境変数
Pathに登録されているか - PATHの変更後にコマンドプロンプトやPowerShellを開き直したか
アンインストール
papingのアンインストールは、配置した実行ファイルを削除するだけです。レジストリも設定ファイルも作成しないため、実行ファイルの削除で完結します。
papingの使い方
papingコマンドの基本構文は、次のとおりです。
$ paping <対象ホスト> -p <ポート番号> [オプション]- 対象ホスト:ホスト名またはIPアドレス
-p:接続先のポート番号(--portでも可)
本記事の検証環境でpapingコマンドを実行した結果は、以下のとおりです。
$ paping 192.168.10.106 -p 80
Paping-NG v1.0.3 - Copyright (c) 2026 Oliver (arch3r.eu)
Connecting to 192.168.10.106 on TCP port 80:
Connected to 192.168.10.106: time=0.98ms protocol=TCP port=80
Connected to 192.168.10.106: time=1.51ms protocol=TCP port=80
Connected to 192.168.10.106: time=0.73ms protocol=TCP port=80
Connected to 192.168.10.106: time=0.78ms protocol=TCP port=80
Connected to 192.168.10.106: time=0.84ms protocol=TCP port=80
Connected to 192.168.10.106: time=0.75ms protocol=TCP port=80
Connected to 192.168.10.106: time=0.76ms protocol=TCP port=80
Connected to 192.168.10.106: time=0.63ms protocol=TCP port=80
^C
Connection statistics:
Probed = 8, Connected = 8, Failed = 0 (0.00%)
Approximate connection times:
Minimum = 0.63ms, Maximum = 1.51ms, Average = 0.87msこの例では、対象ホストのTCP/80に対して接続を試行します。実行中は、各プローブの結果(接続先のIPアドレスやTCP接続確立時間、プロトコル、ポート番号)が1行ずつ表示されます。
- TCP接続が成立した場合:
Connected - TCP接続に失敗した場合:
Connection failed - 指定された時間内に接続結果を確認できない場合:
Connection timed out
-cオプション(試行回数)を指定しない場合、コマンドは自動的に終了しません。終了する場合は、Ctrl+Cを押してください。終了後には、試行回数、成功回数、失敗回数、最小・最大・平均のTCP接続確立時間も確認できます。
【参考】オプション一覧
| オプション | 概要 | コマンド例 | 省略時のデフォルト値 |
|---|---|---|---|
| -p, --port | 接続先のTCPポート | paping <対象ホスト> -p <ポート番号> | ※必須 |
| -c, --count | プローブの実行回数(試行回数) | paping <対象ホスト> -p <ポート番号> -c <回数> | 無制限(Ctrl+Cで停止するまで継続実行) |
| -t, --timeout | TCP接続のタイムアウト時間(単位:ミリ秒) | paping <対象ホスト> -p <ポート番号> -t <ミリ秒> | 1,000ミリ秒(1秒) |
papingを実行してみた
ここからは、VirtualBox上に構築した仮想環境を使用して、パターンごとにpapingの挙動を確認していきます。
- 送信元ホスト
- Kali Linux 2026.2(paping 1.0.3)
- 宛先ホスト
- Ubuntu(192.168.10.106)、Debian(192.168.30.107)など
いずれもVirtualBox上で稼働している仮想マシンです。
ポートに接続できる(正常系)
Webサーバーが稼働しているホストのTCP/80に対して、papingを実行します。
$ paping 192.168.10.106 -p 80 -c 3
Paping-NG v1.0.3 - Copyright (c) 2026 Oliver (arch3r.eu)
Connecting to 192.168.10.106 on TCP port 80:
Connected to 192.168.10.106: time=0.47ms protocol=TCP port=80
Connected to 192.168.10.106: time=0.76ms protocol=TCP port=80
Connected to 192.168.10.106: time=0.73ms protocol=TCP port=80
Connection statistics:
Probed = 3, Connected = 3, Failed = 0 (0.00%)
Approximate connection times:
Minimum = 0.47ms, Maximum = 0.76ms, Average = 0.65msProbed = 3, Connected = 3, Failed = 0 (0.00%)となっているため、3回のTCP接続がすべて成功したことが確認できます。
ポートが閉じている(異常系)
対象ホストで使用していないTCPポート(例.TCP/23)に対して、papingを実行します。
$ paping 192.168.10.106 -p 23 -c 3
Paping-NG v1.0.3 - Copyright (c) 2026 Oliver (arch3r.eu)
Connecting to 192.168.10.106 on TCP port 23:
Connection failed
Connection failed
Connection failed
Connection statistics:
Probed = 3, Connected = 0, Failed = 3 (100.00%)
Approximate connection times:
Minimum = 0.00ms, Maximum = 0.00ms, Average = 0.00msTCP接続が成立しなかったため、Connection failedとなりました。詳細な理由は出力されないため、この結果から「対象ホストが停止している」「ファイアウォールで拒否された」「サービスが待ち受けていない」といった原因まで特定することはできません。
宛先ホストに到達できない(異常系)
次に、宛先ホストに到達できないケースを確認します。
- 宛先ホストが存在しない、起動していない
- ルーティングの問題によって通信経路が確立されていない
- 通信経路上のルーターが停止している など
$ paping 192.168.10.100 -p 80 -c 3
Paping-NG v1.0.3 - Copyright (c) 2026 Oliver (arch3r.eu)
Connecting to 192.168.10.100 on TCP port 80:
Connection timed out
Connection timed out
Connection timed out
Connection statistics:
Probed = 3, Connected = 0, Failed = 3 (100.00%)
Approximate connection times:
Minimum = 0.00ms, Maximum = 0.00ms, Average = 0.00ms-tまたは--timeoutを指定しない場合、papingはデフォルトで1000ミリ秒(1秒)接続を待ちます。上記の場合、この時間内に接続の成功または失敗が確定しなかったため、papingはタイムアウトと判断し、Connection timed outと表示されました。
$ paping 192.168.10.100 -p 80 -c 3 -t 5000
Paping-NG v1.0.3 - Copyright (c) 2026 Oliver (arch3r.eu)
Connecting to 192.168.10.100 on TCP port 80:
Connection failed
Connection failed
Connection failed
Connection statistics:
Probed = 3, Connected = 0, Failed = 3 (100.00%)
Approximate connection times:
Minimum = 0.00ms, Maximum = 0.00ms, Average = 0.00ms一方、-t 5000を指定すると、接続成否を最大5000ミリ秒(5秒)待ちます。上記の実行結果では、その間に接続エラーの応答が届き、接続失敗が確定したため、Connection failedと表示されました。
Connection timed out:指定したタイムアウト時間内にTCP接続の成否が確定しなかったConnection failed:タイムアウトになる前にTCP接続の失敗が確定した
名前解決ができない(異常系)
DNSに登録されていないホスト名を指定します。
$ paping server01.labo.test -p 80
Paping-NG v1.0.3 - Copyright (c) 2026 Oliver (arch3r.eu)
Cannot resolve host: server01.labo.testpapingを実行すると、はじめに指定されたホスト名の名前解決が行われます。上記では、名前解決に失敗したため、Cannot resolve hostを出力して処理を終了しました。
経路上のルーターがICMPを遮断(正常系)
宛先ホストへのTCP通信は許可されているものの、通信経路上でICMPが遮断されているケースを確認します。
中継ルーターにICMPパケットを破棄する設定を適用済み。
まず、通常のpingコマンドを実行します。
ping実行結果
$ ping -c 3 192.168.30.107
PING 192.168.30.107 (192.168.30.107) 56(84) bytes of data.
--- 192.168.30.107 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2038mspingはICMPを利用するため、ICMPが遮断されている環境では応答を得られません。100% packet loss(パケットロス100%)となり、この結果だけを見ると宛先ホストがダウンしているように見えます。
しかし、同じホストに対してpapingを実行すると結果は変わります。TCP接続が許可されていれば、ICMPに応答しない環境であっても次のように接続を確認できます。
paping実行結果
$ paping 192.168.30.107 -p 22 -c 3
Paping-NG v1.0.3 - Copyright (c) 2026 Oliver (arch3r.eu)
Connecting to 192.168.30.107 on TCP port 22:
Connected to 192.168.30.107: time=1.50ms protocol=TCP port=22
Connected to 192.168.30.107: time=1.85ms protocol=TCP port=22
Connected to 192.168.30.107: time=1.94ms protocol=TCP port=22
Connection statistics:
Probed = 3, Connected = 3, Failed = 0 (0.00%)
Approximate connection times:
Minimum = 1.50ms, Maximum = 1.94ms, Average = 1.76msこれがpapingを使う最大の理由です。pingで応答がない場合でも、必ずしも対象ホストが停止しているとは限りません。papingを利用すれば、TCPポート単位での疎通確認が可能です。

