技術ノート Linux Linux で netstat を使用する方法

Linux で netstat を使用する方法

重要なポイント

  • netstat コマンドは、ネットワーク接続、使用中のポート、およびそれらを使用するプロセスに関する情報を提供します。
  • Netsat は引数を受け取って不要な情報を除外し、探している特定の詳細のみを表示できます。
  • sudo netstat -i を実行して、ネットワーク インターフェイスを一覧表示します。

Linux の netstat コマンドを使用すると、ネットワーク接続、使用中のポート、およびそれらを使用するプロセスに関する情報の宝庫が得られます。使い方を学びましょう。

ポート、プロセス、プロトコル

ネットワークソケットは 接続中か、接続を待機しているかのいずれかです。接続には、 トランスポート コントロール プロトコル (TCP) や ユーザー データグラム プロトコル UDP などのネットワーク プロトコルが使用されます。 インターネット プロトコル アドレスと ネットワーク ポート を使用して接続を確立します。

ソケットという言葉からは、リード線やケーブルの物理的な接続ポイントを思い浮かべるかもしれませんが、この文脈では、ソケットはネットワーク データ接続の一端を処理するために使用されるソフトウェア構造です。

ソケットには 2 つの主な状態があります。1 つは接続されて進行中のネットワーク通信を促進しているか、または受信接続が接続するのを待機しているかのいずれかです。ソケットがリモート デバイス上で接続を確立している途中の状態など、他の状態もありますが、一時的な状態は脇に置いて、ソケットは接続中または待機中 (これはよくリスニングと呼ばれます) のいずれかであると考えることができます。

リッスンするソケットはサーバーと呼ばれ、リッスンするソケットとの接続を要求するソケットはクライアントと呼ばれます。これらの名前は、ハードウェアやコンピューターの役割とは何の関係もありません。これらは、接続の両端での各ソケットの役割を定義するだけです。

netstat コマンドを使用すると、どのソケットが接続されているか、どのソケットがリッスンしているかを検出できます。つまり、どのポートが使用中で、どのプロセスがそれらを使用しているのかがわかります。ルーティング テーブルと、 ネットワーク インターフェイス マルチキャスト接続 に関する統計を表示できます。

netstat の機能は、 ip ss などのさまざまな Linux ユーティリティで時間の経過とともに複製されてきました。すべてのネットワーク分析コマンドの祖先であるこのコマンドは、すべての Linux および Unix 系オペレーティング システム、さらには Windows や Mac でも利用できるため、今でも知っておく価値があります。

コマンドの例とともにその使用方法を説明します。

Linux で netstat を使用する方法

netstat を使用してすべてのソケットをリストする

-a (all) オプションを使用すると、 netstat 接続され待機しているすべてのソケットを表示します。このコマンドは長いリストを生成する可能性があるため、それを less にパイプします。

 netstat -a |少ない

リストには、TCP (IP)、 TCP6 (IPv6)、および UDP ソケットが含まれます。

ターミナル ウィンドウの回り込みにより、何が起こっているかを確認することが少し難しくなります。そのリストのいくつかのセクションを次に示します。

アクティブなインターネット接続 (サーバーおよび確立済み)

プロト

受信Q

送信Q

ローカルアドレス

外国の住所

TCP

0

0

ローカルホスト: ドメイン

0.0.0.0:*

聞く

TCP

0

0

0.0.0.0:ssh

0.0.0.0:*

聞く

TCP

0

0

ローカルホスト:ipp

0.0.0.0:*

聞く

TCP

0

0

ローカルホスト:SMTP

0.0.0.0:*

聞く

TCP6

0

0

[::]:ssh

[::]:*

聞く

TCP6

0

0

ip6-ローカルホスト:ipp

[::]:*

聞く

アクティブな UNIX ドメイン ソケット (サーバーおよび確立済み)

プロト

RefCnt

フラグ

タイプ

Iノード

パス

ユニックス

24

[ ]

ディグラム

12831

/run/systemd/journal/dev-log

ユニックス

2

[ACC]

ストリーム

聞いている

24747

@/tmp/dbus-zH6clYmvw8

ユニックス

2

[ ]

ディグラム

26372

/run/user/1000/system/notify

ユニックス

2

[ ]

ディグラム

23382

/run/user/121/system/notify

ユニックス

2

[ACC]

SEQパケット

聞いている

12839

/run/udev/control

「アクティブなインターネット」セクションには、接続されている外部接続とリモート接続要求をリッスンしているローカル ソケットがリストされます。つまり、外部デバイスに対して確立されている (または確立される) ネットワーク接続がリストされます。

「UNIX ドメイン」セクションには、接続されリッスンしている内部接続がリストされます。言い換えれば、コンピュータ内でさまざまなアプリケーション、プロセス、オペレーティング システムの要素間で確立されている接続をリストします。

「アクティブなインターネット」列は次のとおりです。

  • Proto: このソケットで使用されるプロトコル (TCP や UDP など)。
  • Recv-Q: 受信キュー。これらは受信されてバッファリングされた受信バイトで、この接続を使用しているローカル プロセスが読み取って消費するのを待っています。
  • Send-Q: 送信キュー。これは、送信キューから送信する準備ができているバイトを示します。
  • ローカル アドレス: 接続のローカル側のアドレスの詳細。デフォルトでは、 netstat アドレスにローカル ホスト名、ポートにサービス名を表示します。
  • 外部アドレス: 接続のリモート エンドのアドレスとポート番号。
  • 状態: ローカルソケットの状態。 UDP ソケットの場合、これは通常空白です。以下の状態表を参照してください。

TCP 接続の場合、状態値は次のいずれかになります。

  • リッスン: サーバー側のみ。ソケットは接続要求を待っています。
  • SYN-SENT: クライアント側のみ。このソケットは接続要求を行っており、それが受け入れられるかどうかを待機しています。
  • SYN-RECEIVED: サーバー側のみ。このソケットは、接続要求を受け入れた後、接続確認を待機しています。
  • 確立: サーバーとクライアント。サーバーとクライアントの間に有効な接続が確立され、両者の間でデータを転送できるようになります。
  • FIN-WAIT-1: サーバーとクライアント。このソケットは、リモート ソケットからの接続終了要求、またはこのソケットから以前に送信された接続終了要求の確認を待っています。
  • FIN-WAIT-2: サーバーとクライアント。このソケットはリモートソケットからの接続終了要求を待っています。
  • CLOSE-WAIT: サーバーとクライアント。このソケットはローカル ユーザーからの接続終了要求を待っています。
  • 終わりに: サーバーとクライアント。このソケットは、リモート ソケットからの接続終了要求の確認を待っています。
  • LAST-ACK: サーバーとクライアント。このソケットは、リモート ソケットに送信した接続終了要求の確認応答を待っています。
  • TIME-WAIT: サーバーとクライアント。このソケットは、リモート ソケットの終了要求を受信したことを通知するために、リモート ソケットに確認応答を送信しました。現在、確認応答が受信されたことを確認するのを待っています。
  • CLOSED: 接続がないため、ソケットは終了しました。

「Unix ドメイン」列は次のとおりです。

  • Proto: このソケットで使用されるプロトコル。 「ユニックス」になります。
  • RefCnt: 参照カウント。このソケットに接続されている接続プロセスの数。
  • フラグ: これは通常、 SO_ACCEPTON を表す ACC に設定され、ソケットが接続要求を待っていることを意味します。 W として示される SO_WAITDATA 、読み取りを待機しているデータがあることを意味します。 N として示される SO_NOSPACE 、ソケットにデータを書き込むスペースがない (つまり、送信バッファがいっぱいである) ことを意味します。
  • タイプ: ソケットのタイプ。以下のタイプ表を参照してください。
  • 状態: ソケットの状態。以下の状態表を参照してください。
  • I-Node: このソケットに関連付けられたファイル システムの i ノード。
  • Path : ソケットへのファイル システム パス。

Unix ドメインのソケット タイプは次のいずれかになります。

  • DGRAM: ソケットは固定長のメッセージを使用してデータグラム モードで使用されています。データグラムは、信頼性、順序付け、重複がないことは保証されていません。
  • STREAM: このソケットはストリームソケットです。これは、一般的な「通常の」タイプのソケット接続です。これらのソケットは、信頼性の高いシーケンス (順序どおり) のパケット配信を提供するように設計されています。
  • RAW: このソケットは RAW ソケットとして使用されています。 Raw ソケットは OSI モデル のネットワーク レベルで動作し、トランスポート レベルから TCP および UDP ヘッダーを参照しません。
  • RDM: このソケットは、確実に配信されるメッセージ接続の一端に配置されます。
  • SEQPACKET: このソケットはシーケンシャル パケット ソケットとして動作します。これは、信頼性が高く、順序付けられ、重複のないパケット配信を提供するもう 1 つの手段です。
  • PACKET: Raw インターフェイス アクセス ソケット。パケット ソケットは、OSI モデルのデバイス ドライバー (つまり、データ リンク層) レベルで生のパケットを受信または送信するために使用されます。

Unix ドメインのソケット状態は次のいずれかになります。

  • FREE: このソケットは割り当てられていません。
  • LISTENING: このソケットは受信接続リクエストをリッスンしています。
  • 接続中: このソケットは接続中です。
  • CONNECTED: 接続が確立されており、ソケットはデータを送受信できます。
  • 切断中: 接続は切断中です。

いやあ、情報量が多いですね! netstat オプションの多くは何らかの方法で結果を絞り込みますが、内容はあまり変更されません。見てみましょう。

Linux で netstat を使用する方法

netstat コマンドを使用したタイプ別のソケットのリスト

netstat -a コマンドは、必要以上の情報を提供する可能性があります。 TCP ソケットのみを表示したい場合、または表示する必要がある場合は、 -t (TCP) オプションを使用して、TCP ソケットのみを表示するように表示を制限できます。

 netstat -at |少ない

表示出力が大幅に減少します。リストされているいくつかのソケットはすべて TCP ソケットです。

-u (UDP) および -x (UNIX) オプションは同様に動作し、コマンド ラインで指定されたソケットのタイプに結果を制限します。使用中の -u (UDP) オプションは次のとおりです。

 netstat -au |少ない

UDP ソケットのみがリストされます。

Linux で netstat を使用する方法

状態ごとのソケットのリスト

待機状態または待機状態にあるソケットを表示するには、 -l (待機) オプションを使用します。

 netstat -l |少ない

リストされているソケットは、リッスン状態にあるソケットです。

これを -t (TCP)、-u (UDP)、および -x (UNIX) オプションと組み合わせて、対象のソケットをさらに特定できます。リッスンしている TCP ソケットを探してみましょう。

 netstat -lt |少ない

ここでは、TCP リスニング ソケットのみが表示されます。

Linux で netstat を使用する方法

プロトコル別のネットワーク統計

プロトコルの統計を表示するには、 -s (統計) オプションを使用し、 -t (TCP)、 -u (UDP)、または -x (UNIX) オプションを渡します。 -s (統計) オプションを単独で使用すると、すべてのプロトコルの統計が表示されます。 TCP プロトコルの統計を確認してみましょう。

 netstat -st |少ない

TCP 接続の統計のコレクションは、 less に表示されます。

Linux で netstat を使用する方法

プロセス名と PID の表示

ソケットを使用しているプロセスの プロセス ID (PID) とそのプロセスの名前を確認すると便利です。 -p (プログラム) オプションはまさにそれを行います。待機状態にある TCP ソケットを使用するプロセスの PID とプロセス名を見てみましょう。 sudo 使用して、通常 root 権限が必要な情報を含む、利用可能なすべての情報を確実に受信します。

 sudo netstat -p -at

フォーマットされた表の出力は次のとおりです。

Active Internet connections (servers and established)

プロト

受信Q

送信Q

ローカルアドレス

外国の住所

PID/プログラム名

tcp

0

0

ローカルホスト: ドメイン

0.0.0.0:*

聞く

6927/systemd-resolv

tcp

0

0

0.0.0.0:ssh

0.0.0.0:*

聞く

751/sshd

tcp

0

0

ローカルホスト:ipp

0.0.0.0:*

聞く

7687/カップSD

tcp

0

0

ローカルホスト:SMTP

0.0.0.0:*

聞く

1176/マスター

tcp6

0

0

[::]:ssh

[::]:*

聞く

751/sshd

tcp6

0

0

ip6-ローカルホスト:ipp

[::]:*

聞く

7687/カップSD

tcp6

0

0

ip6-ローカルホスト:smtp

[::]:*

聞く

1176/マスター

「PID/プログラム名」という追加の列があります。この列には、各ソケットを使用するプロセスの PID と名前がリストされます。

Linux で netstat を使用する方法

数値アドレスのリスト

曖昧さを取り除くために実行できるもう 1 つの手順は、ローカル アドレスとリモート アドレスを、解決されたドメインとホスト名ではなく IP アドレスとして表示することです。 -n (数値) オプションを使用すると、IPv4 アドレスはドット付き 10 進数形式で表示されます。

 sudo netstat -an |少ない

IP アドレスは数値で表示されます。 IP アドレスとコロン「 : 」で区切られたポート番号も表示されます。

IP アドレス 127.0.0.1 は、ソケットが ローカル コンピュータのループバック アドレス にバインドされていることを示します。 IP アドレス 0.0.0.0 は、 ローカル アドレスの場合は「デフォルト ルート」を意味し、外部アドレスの場合は「任意の IP アドレス」を意味すると考えることができます。 「 :: 」で示される IPv6 アドレスもすべてゼロのアドレスです。

リストされているポートを簡単に チェックして、通常の目的を確認 できます。

ルーティングテーブルの表示

-r (ルート) オプションは、カーネル ルーティング テーブルを表示します。

 sudo netstat -r

その出力をきちんとした表に示します。

カーネルIPルーティングテーブル

行き先

ゲートウェイ

ジェンマスク

フラグ

MSS

いた

イフェイス

デフォルト

Vigor.ルーター

0.0.0.0

UG

0

0

0

enp0s3

リンクローカル

0.0.0.0

255.255.0.0

U

0

0

0

enp0s3

192.168.4.0

0.0.0.0

255.255.255.0

U

0

0

0

enp0s3

そして、列の意味は次のとおりです。

  • 宛先: 宛先ネットワークまたは宛先ホストデバイス (宛先がネットワークでない場合)。
  • ゲートウェイ: ゲートウェイのアドレス。ゲートウェイアドレスが設定されていない場合は、ここにアスタリスク「 * 」が表示されます。
  • Genmask: ルートのサブネット マスク。
  • フラグ: 以下のフラグ表を参照してください。
  • MSS: このルート上の TCP 接続の デフォルトの最大セグメント サイズ — これは、1 つの TCP セグメントで受信できるデータの最大量です。
  • ウィンドウ: このルート上の TCP 接続の デフォルトのウィンドウ サイズ 。受信バッファがいっぱいになる前に転送および受信できるパケットの数を示します。実際には、パケットは受信アプリケーションによって消費されます。
  • irtt: 初期 往復時間 。この値は、応答が遅いリモート接続の TCP パラメーターを動的に調整するためにカーネルによって参照されます。
  • Iface: このルートを介して送信されるパケットの送信元となるネットワーク インターフェイス。

flags の値は次のいずれかになります。

  • U: ルートは完成しました。
  • H: ターゲットはホストであり、このルート上で可能な唯一の宛先です。
  • G: ゲートウェイを使用します。
  • R: 動的ルーティングのルートを元に戻します。
  • D: ルーティング デーモンによって動的にインストールされます。
  • M: インターネット制御メッセージ プロトコル (ICMP) パケットを受信したときに、ルーティング デーモンによって変更されます。
  • A: 自動 DNS および DHCP 構成ファイル ジェネレーターである addrconf によってインストールされます。
  • C: キャッシュエントリ。
  • !: ルートを拒否します。

プロセスが使用するポートの検索

netstat の出力を grep 経由でパイプすると、プロセスを名前で検索し、プロセスが使用しているポートを識別できます。以前に使用した -a (すべて)、 -n (数値)、および -p (プログラム) オプションを使用して、「sshd」を検索します。

 sudo netstat -anp | grep「sshd」

grep ターゲット文字列を検索し、 sshd デーモンがポート 22 を使用していることがわかります。

もちろん、これを逆に行うこともできます。 「:22」を検索すると、そのポートを使用しているプロセスがあれば、それを見つけることができます。

 sudo netstat -anp | grep ":22"

今回、 grep ターゲット文字列「:22」を検出し、このポートを使用しているプロセスが sshd デーモン、プロセス ID 751 であることがわかります。

ネットワークインターフェースのリストを表示する

-i (インターフェイス) オプションは、 netstat が検出できるネットワーク インターフェイスのテーブルを表示します。

 sudo netstat -i

より読みやすい形式の出力は次のとおりです。

カーネルインターフェーステーブル

イフェイス

MTU

RX-OK

RX-ERR

RX-DRP

RX-OVR

TX-OK

送信エラー

TX-DRP

TX-OVR

フラグ

enp0s3

1500

4520671

0

0

0

4779773

0

0

0

BMRU

やあ

65536

30175

0

0

0

30175

0

0

0

LRU

列の意味は次のとおりです。

  • Iface: インターフェースの名前。 enp0s3 インターフェイスは外部へのネットワーク インターフェイスであり、 lo インターフェイスはループバック インターフェイスです。ループバック インターフェイスにより、コンピュータがネットワークに接続されていない場合でも、ネットワーク プロトコルを使用してプロセスがコンピュータ内で相互通信できるようになります。
  • MTU: 最大伝送単位 (MTU)。これは送信できる最大の「パケット」です。これは、ルーティング フラグ、プロトコル フラグ、その他のメタデータを含むヘッダーと、実際に転送されるデータで構成されます。
  • RX-OK: エラーなしで受信されたパケットの数。
  • RX-ERR: エラーを含む受信パケットの数。これをできるだけ低くしたいと考えています。
  • RX-DRP: ドロップされた (つまり失われた) パケットの数。また、これをできるだけ低くしたいと考えています。
  • RX-OVR: 受信時のオーバーフローにより失われたパケットの数。これは通常、受信バッファがいっぱいでそれ以上データを受け入れることができなかったが、さらに多くのデータを受信したため破棄する必要があったことを意味します。この数値は低いほど良く、ゼロが完全です。
  • TX-OK: エラーなしで送信されたパケットの数。
  • RX-ERR: エラーを含む送信されたパケットの数。これをゼロにしたいと考えています。
  • RX-DRP: 送信時にドロップされたパケットの数。理想的には、これはゼロである必要があります。
  • RX-OVR: 送信時のオーバーフローにより失われたパケットの数。これは通常、送信バッファがいっぱいでそれ以上のデータを受け入れることができなかったが、さらに多くのデータを送信する準備ができていたため、破棄する必要があったことを意味します。
  • フラグ: フラグ。以下のフラグ表を参照してください。

フラグは以下を表します。

  • B: ブロードキャストアドレスが使用されています。
  • L: このインターフェースはループバックデバイスです。
  • M: すべてのパケットが受信されています (つまり、プロミスキャス モード)。何もフィルタリングまたは破棄されません。
  • O: このインターフェイスでは アドレス解決プロトコル (ARP) がオフになっています。
  • P: これは ポイントツーポイント (PPP) 接続です。
  • R: インターフェースは実行中です。
  • U: インターフェースは起動しています。

マルチキャスト グループ メンバーシップの一覧表示

簡単に言うと、 マルチキャスト送信では 、受信者の数に関係なく、パケットを 1 回だけ送信できます。たとえば、ビデオ ストリーミングなどのサービスの場合、これにより送信者の観点から効率が大幅に向上します。

-g (グループ) オプションを使用すると、 netstat 各インターフェイス上のソケットのマルチキャスト グループ メンバーシップをリストします。

 sudo netstat -g

列は非常に単純です。

  • インターフェース: ソケットが送信するインターフェースの名前。
  • RefCnt: 参照カウント。ソケットに接続されているプロセスの数です。
  • グループ: マルチキャスト グループの名前または識別子。

ニュー・キッズ・オン・ザ・ブロック

Route ip ifconfig 、および ss コマンドを使用すると、 netstat が表示できる内容の多くを提供できます。これらはすべて素晴らしいコマンドなので、チェックしてみる価値があります。

netstat に焦点を当てたのは、作業している Unix 系オペレーティング システムに関係なく、たとえ知られていないオペレーティング システムであっても、普遍的に利用できるからです。

Linuxコマンド

ファイル

tar pv cat tac chmod grep diff sed ar man pushd popd fsck testdisk seq fd pandoc cd $PATH awk join jq fold uniq journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · パッチ · 変換 · rclone · シュレッド · srm · scp · gzip · chattr · カット · 検索 · umask · wc · tr

プロセス

エイリアス · スクリーン · トップ · ナイス · renice · 進行状況 · strace · systemd · tmux · chsh · 履歴 · at · バッチ · フリー · what · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · タイムアウト · ウォール · はい · キル · スリープ · sudo · su · タイム · groupadd · usermod · グループ · lshw · シャットダウン · 再起動 · 停止 · パワーオフ · パスワード · lscpu · crontab · 日付 · bg · fg · pidof · nohup · pmap

ネットワーキング

netstat ping ip ss whois fail2ban bmon dig finger nmap ftp curl wget who whoami w iptables ssh-keygen ufw arping firewalld

「 Linux で netstat を使用する方法」に関するベスト動画選定!

【ゆっくりIT】netstatコマンド 現場で役立つネットワーク解析コマンド ~ゆっくり解説コマンド No.035
Linux入門 非常によく使うLinuxのデバッグコマンド CPU、メモリ、ネットワークの使用状況を確認するコマンドです。  top, free, vnstatコマンドなどを解説。