【ネットワークコマンド】 通信ソケット確認ツール netstatの使い方
今回は、Linuxでネットワーク状態を確認するときに使うnetstatコマンドについて紹介します。
サーバーに接続できない、ポートが待ち受けていない、どのプロセスが通信しているか分からない、といった場面で netstatは役に立ちます。
後継のssコマンドの台頭で使用頻度が下がってきていますが、古いLinux環境や組み込み機器向けのLinuxでは現役の重要ツールです。
この記事では、UbuntuなどのLinux環境を前提に、netstatのインストール方法から実践的な確認手順までをまとめます。
目次
netstatとは
netstatは、ネットワーク接続、待受ポート、ルーティングテーブル、インタフェース統計などを確認できるコマンドです。
Linuxでは昔から使われてきた代表的な確認ツールです。
ただし、現在は後継のssコマンドの台頭で使用頻度が下がってきてもいます。
とは言え、古いLinux環境や組み込み機器向けLinuxではまだまだ現役のツールですので、知っていて損はありません。
(まあ、組み込み機器向けのLinuxの場合、そのnetstatですらインストールされていないときもありますが。。。)
netstatコマンドのインストール
インストール確認
まず、現在の環境でnetstatが使えるか確認します。
which netstat netstat --version
インストール
次のコマンドでインストールします。
netstatはnet-toolsパッケージに含まれます。
sudo apt update sudo apt install net-tools
netstatの使い方
ここでは、基本的な確認コマンドから実際の用途別の見方までをまとめて紹介します。
全ソケットを表示する
netstat -a
TCP/UDPの接続中ソケットと待受ソケットをまとめて確認できます。
ルーティングテーブルを確認する
netstat -rn
デフォルトの経路を見たい場合は以下を実行します。
netstat -rn | grep '^0.0.0.0'
または
netstat -r | grep '^default'
数値表示の -rn では、IPv4のデフォルト経路が 0.0.0.0 として見えることがあります。-n を外した表示では、環境によって default と表示されます。
このように、デフォルトゲートウェイや経路情報を数値表示で確認できます。
インタフェース統計を確認する(または、NICのエラーやドロップを確認する)
netstat -i
インタフェースごとのパケット送受信、エラー、ドロップ状況の確認に使えます。
サーバーが待受しているか確認する
sudo netstat -lntp
WebサーバーやSSHサーバーが想定ポートでLISTENしているかを確認します。
出力結果のローカルアドレス欄に 0.0.0.0 や :: が表示されている場合は、特定のIPアドレスではなく全インタフェース向けに待受していることを意味します。
余談:私は良くこのオプションを使っています。
私は仕事でL7プロトコルを設計し、特殊なネットワーク制御ソフトウェアを開発することもあります。そのような場面では、特定ネットワーク内のIPアドレスだけに対してLISTENしているかをよく確認します。
このような要件があるにもかかわらず、0.0.0.0 や :: のように全インタフェース向けの待受になっている表示を見ると冷や汗が出ます。ネットワーク制御ソフトウェアの開発者目線では、そのような想定外の待受を素早く見抜くために netstat を使います。
※今回言った内容をC言語ソフトウェアベースで考えると、IPv4ではソケット通信で INADDR_ANY を使ったか否かという話になります。IPv6では in6addr_any / IN6ADDR_ANY_INIT に相当します。
特定ポートを掴んでいるプロセスを調べる(例:8080)
sudo netstat -lntp | grep ':8080 '
ポート競合や起動失敗時に、どのプロセスがポートを使用しているかを確認できます。
接続が確立している通信だけ見る
sudo netstat -antp | grep ESTABLISHED
既に確立しているTCP接続だけを確認したいときに使います。待受状態ではなく、実際に通信中の接続を見たい場面向けです。
UDPサービスの待受を確認する(例:53 / 123)
例としてDNS(53/udp)やNTP(123/udp)の待受確認に使えます。
sudo netstat -lnup | grep ':53 '
sudo netstat -lnup | grep ':123 '
ssコマンドとの違い
現行Linuxではssコマンドの方が高速で情報量も多いため、日常運用ではssが選ばれることが増えています。
一方で、既存環境の手順書や過去記事ではnetstatが前提になっていることが多く、 読み替えのために基本操作を把握しておく価値があります。
読み替えの例
# netstat sudo netstat -lntp # ss sudo ss -lntp
おわりに
この記事では、netstatコマンドの基本的な使い方と、運用でよく使う確認ポイントを紹介しました。
netstatは古典的なツールですが、接続・待受・経路・統計を一通り確認できるため、トラブルシュートの初動で今も有効です。
必要に応じてssコマンドも併用しながら、状況に合わせて使い分けていきましょう。
参考文献
- netstat(8) - Linux manual page https://man7.org/linux/man-pages/man8/netstat.8.html
- ss(8) - Linux manual page https://man7.org/linux/man-pages/man8/ss.8.html