netstat UDP:Windows/Linuxでのコマンド例と活用法

netstat UDP:Windows/Linuxでのコマンド例と活用法

ネットワーク管理、セキュリティ分析、トラブルシューティングにおいて、ネットワークの状態を把握することは非常に重要です。そのための強力なツールの一つが netstat コマンドです。特に、UDP(User Datagram Protocol)に関する情報を netstat で取得し、分析することは、ネットワークアプリケーションの動作状況の把握、セキュリティリスクの検出、パフォーマンス問題の特定に役立ちます。

本記事では、netstat コマンドを用いて UDP 関連の情報を取得・分析する方法を、Windows と Linux の両方の環境を対象に、詳細なコマンド例と活用法を含めて解説します。

1. UDP (User Datagram Protocol) の基礎

netstat コマンドを理解するためには、まず UDP について理解しておく必要があります。

UDP の特徴:

  • コネクションレス: TCP と異なり、通信前に接続を確立する手続き (ハンドシェイク) を行いません。データを一方的に送信するだけで通信が開始されます。
  • 信頼性の低いプロトコル: データが確実に相手に届くことを保証しません。データ損失や順序の入れ替わりが発生する可能性があります。
  • 軽量: コネクション管理のオーバーヘッドがないため、TCP よりも高速にデータを送信できます。
  • ブロードキャスト/マルチキャスト: 特定のグループやネットワーク全体にデータを送信することができます。

UDP の利用例:

  • DNS (Domain Name System): ドメイン名を IP アドレスに変換する際に利用されます。
  • VoIP (Voice over IP): 音声データをリアルタイムに送信するために利用されます。
  • ストリーミングメディア: ライブ配信などのリアルタイム性が重要なアプリケーションで利用されます。
  • オンラインゲーム: 低遅延が求められるゲームにおいて、位置情報などのデータを送信するために利用されます。
  • TFTP (Trivial File Transfer Protocol): シンプルなファイル転送プロトコルです。

UDP は、リアルタイム性や高速性が求められるアプリケーションに適していますが、信頼性が低いという欠点があります。そのため、アプリケーション側でエラー検出や再送処理を行う必要があります。

2. netstat コマンドの基本

netstat は、ネットワーク接続、ルーティングテーブル、ネットワークインターフェースの状態を表示するコマンドです。Windows と Linux の両方で利用できますが、オプションや出力形式に若干の違いがあります。

基本的な構文:

  • Windows: netstat [options]
  • Linux: netstat [options] (ただし、ss コマンドに置き換えられる傾向にあります。後述)

主要なオプション:

  • -a (または -all): すべての接続とリスニングポートを表示します。
  • -n (または --numeric): アドレスとポート番号をドメイン名ではなく数値で表示します。DNSルックアップを省略するため、処理が高速になります。
  • -p (または --program): 接続に関連付けられたプロセス ID (PID) とプログラム名を表示します。管理者権限が必要です。
  • -u (または --udp): UDP 接続のみを表示します。
  • -t (または --tcp): TCP 接続のみを表示します。
  • -r (または --route): ルーティングテーブルを表示します。
  • -i (または --interfaces): ネットワークインターフェースの状態を表示します。
  • -s (または --statistics): プロトコルごとの統計情報を表示します。
  • -e (または --extend): より詳細な情報を表示します。 (Windows のみ)
  • -o: 各接続に関連付けられたプロセス ID (PID) を表示します。 (Windows のみ)
  • -b: 各接続に関連付けられた実行ファイルを表示します。 (Windows のみ、管理者権限が必要)

3. netstat で UDP 関連情報を取得する (Windows)

Windows で netstat コマンドを用いて UDP 関連の情報を取得する方法を解説します。

3.1. すべての UDP エンドポイントを表示する:

netstat -a -n -p UDP

  • -a: すべての接続とリスニングポートを表示します。
  • -n: アドレスとポート番号を数値で表示します。
  • -p UDP: UDP プロトコルに関連する接続のみを表示します。

出力例:

プロトコル ローカルアドレス 外部アドレス 状態
UDP 0.0.0.0:53 *:*
UDP 0.0.0.0:500 *:*
UDP 0.0.0.0:4500 *:*
UDP 127.0.0.1:137 *:*
UDP 127.0.0.1:1900 *:*
UDP 192.168.1.10:137 *:*
UDP 192.168.1.10:54321 *:*
UDP [::]:53 *:*
UDP [::]:500 *:*
UDP [::]:4500 *:*
UDP [::1]:137 *:*
UDP [::1]:1900 *:*
UDP [fe80::...]%10:137 *:*
UDP [fe80::...]%10:54322 *:*

出力項目の説明:

  • プロトコル: 使用されているプロトコル (UDP)
  • ローカルアドレス: ローカルマシンの IP アドレスとポート番号。 0.0.0.0 は、すべての IP アドレスでリスンしていることを意味します。 *:* は、すべてのポート番号に適用されることを意味します。
  • 外部アドレス: リモートマシンの IP アドレスとポート番号。UDP はコネクションレスなので、接続先がない場合は *:* と表示されます。
  • 状態: UDP はコネクションレスなので、常に * または空白で表示されます。

3.2. UDP エンドポイントに関連付けられたプロセス ID (PID) を表示する:

netstat -a -n -o

  • -a: すべての接続とリスニングポートを表示します。
  • -n: アドレスとポート番号を数値で表示します。
  • -o: 関連付けられたプロセス ID (PID) を表示します。

出力例:

プロトコル ローカルアドレス 外部アドレス 状態 PID
UDP 0.0.0.0:53 *:* 1234
UDP 0.0.0.0:500 *:* 5678
UDP 0.0.0.0:4500 *:* 5678
UDP 127.0.0.1:137 *:* 9012
UDP 127.0.0.1:1900 *:* 3456
UDP 192.168.1.10:137 *:* 9012
UDP 192.168.1.10:54321 *:* 7890
UDP [::]:53 *:* 1234
UDP [::]:500 *:* 5678
UDP [::]:4500 *:* 5678
UDP [::1]:137 *:* 9012
UDP [::1]:1900 *:* 3456
UDP [fe80::...]%10:137 *:* 9012
UDP [fe80::...]%10:54322 *:* 7890

PID を確認することで、どのプロセスがどの UDP ポートを使用しているかを特定できます。 tasklist コマンドを使用して、PID に対応するプロセス名を確認できます。

tasklist /FI "PID eq 1234"

3.3. UDP エンドポイントに関連付けられた実行ファイルを表示する (管理者権限が必要):

netstat -a -n -b

  • -a: すべての接続とリスニングポートを表示します。
  • -n: アドレスとポート番号を数値で表示します。
  • -b: 関連付けられた実行ファイルを表示します。

出力例:

“`
プロトコル ローカルアドレス 外部アドレス 状態
UDP 0.0.0.0:53 :
[System Process]
DNS Client Service

UDP 0.0.0.0:500 :
[System Process]
IKEEXT

UDP 0.0.0.0:4500 :
[System Process]
IKEEXT

UDP 127.0.0.1:137 :
[System Process]
NetBT

UDP 127.0.0.1:1900 :
svchost.exe

UDP 192.168.1.10:137 :
[System Process]
NetBT

UDP 192.168.1.10:54321 :
chrome.exe

UDP [::]:53 :
[System Process]
DNS Client Service

UDP [::]:500 :
[System Process]
IKEEXT

UDP [::]:4500 :
[System Process]
IKEEXT

UDP [::1]:137 :
[System Process]
NetBT

UDP [::1]:1900 :
svchost.exe

UDP [fe80::…]%10:137 :
[System Process]
NetBT

UDP [fe80::…]%10:54322 :
chrome.exe
“`

実行ファイル名を表示することで、どのアプリケーションが特定の UDP ポートを使用しているかを直接特定できます。これにより、不正なアプリケーションがバックグラウンドで UDP を使用しているかどうかなどを確認できます。

注意: -b オプションは管理者権限で実行する必要があります。また、表示される情報が正確でない場合もあります。

4. netstat で UDP 関連情報を取得する (Linux)

Linux で netstat コマンドを用いて UDP 関連の情報を取得する方法を解説します。ただし、最近の Linux ディストリビューションでは netstat コマンドは非推奨となり、より強力な ss コマンドが推奨されています。 まず netstat の例を挙げ、その後に ss コマンドについて詳しく説明します。

4.1. netstat での UDP エンドポイント表示:

netstat -anu

  • -a: すべての接続とリスニングポートを表示します。
  • -n: アドレスとポート番号を数値で表示します。
  • -u: UDP プロトコルに関連する接続のみを表示します。

出力例:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp 0 0 192.168.1.10:137 0.0.0.0:*
udp 0 0 192.168.1.10:5353 0.0.0.0:*
udp 0 0 :::68 :::*
udp 0 0 ::1:323 :::*
udp 0 0 fe80::...:137 :::*
udp 0 0 fe80::...:5353 :::*

出力項目の説明:

  • Proto: 使用されているプロトコル (udp)
  • Recv-Q: 受信キューのバイト数。
  • Send-Q: 送信キューのバイト数。
  • Local Address: ローカルマシンの IP アドレスとポート番号。 0.0.0.0 は、すべての IP アドレスでリスンしていることを意味します。 ::は、すべてのIPv6アドレスでリッスンしていることを意味します。
  • Foreign Address: リモートマシンの IP アドレスとポート番号。UDP はコネクションレスなので、接続先がない場合は 0.0.0.0:* または :::* と表示されます。
  • State: UDP はコネクションレスなので、常に空白で表示されます。

4.2. netstat で UDP エンドポイントに関連付けられたプロセス ID (PID) とプログラム名を表示する (管理者権限が必要):

sudo netstat -anpu

  • -a: すべての接続とリスニングポートを表示します。
  • -n: アドレスとポート番号を数値で表示します。
  • -p: 関連付けられたプロセス ID (PID) とプログラム名を表示します。
  • -u: UDP プロトコルに関連する接続のみを表示します。

出力例:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:68 0.0.0.0:* 1234/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 5678/chronyd
udp 0 0 192.168.1.10:137 0.0.0.0:* 9012/nmbd
udp 0 0 192.168.1.10:5353 0.0.0.0:* 3456/avahi-daemon:
udp 0 0 :::68 :::* 1234/dhclient
udp 0 0 ::1:323 :::* 5678/chronyd
udp 0 0 fe80::...:137 :::* 9012/nmbd
udp 0 0 fe80::...:5353 :::* 3456/avahi-daemon:

PID とプログラム名を確認することで、どのプロセスがどの UDP ポートを使用しているかを特定できます。

注意: -p オプションは管理者権限 (sudo) で実行する必要があります。

5. ss コマンドによる UDP 関連情報の取得 (Linux)

ss (socket statistics) コマンドは、netstat に代わる比較的新しいツールであり、より高速で効率的なネットワーク情報の取得が可能です。 近年の Linux ディストリビューションでは、netstat より ss の利用が推奨されています。

5.1. すべての UDP エンドポイントを表示する:

ss -anu

  • -a: すべてのソケットを表示します。
  • -n: アドレスとポート番号を数値で表示します。
  • -u: UDP ソケットのみを表示します。

出力例:

State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
UNCONN 0 0 127.0.0.1:323 0.0.0.0:*
UNCONN 0 0 192.168.1.10:137 0.0.0.0:*
UNCONN 0 0 192.168.1.10:5353 0.0.0.0:*
UNCONN 0 0 [::]:68 [::]:*
UNCONN 0 0 [::1]:323 [::]:*
UNCONN 0 0 [fe80::...]:137 [::]:*
UNCONN 0 0 [fe80::...]:5353 [::]:*

出力項目の説明:

  • State: ソケットの状態 (UDP の場合は UNCONN = Unconnected)
  • Recv-Q: 受信キューのバイト数。
  • Send-Q: 送信キューのバイト数。
  • Local Address:Port: ローカルマシンの IP アドレスとポート番号。
  • Peer Address:Port: リモートマシンの IP アドレスとポート番号。UDP はコネクションレスなので、接続先がない場合は 0.0.0.0:* または [::]:* と表示されます。
  • Process: 関連付けられたプロセス。

5.2. UDP エンドポイントに関連付けられたプロセス ID (PID) とプログラム名を表示する (管理者権限が必要):

sudo ss -anpu

  • -a: すべてのソケットを表示します。
  • -n: アドレスとポート番号を数値で表示します。
  • -p: 関連付けられたプロセス ID (PID) とプログラム名を表示します。
  • -u: UDP ソケットのみを表示します。

出力例:

State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=1234,fd=5))
UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=5678,fd=19))
UNCONN 0 0 192.168.1.10:137 0.0.0.0:* users:(("nmbd",pid=9012,fd=10))
UNCONN 0 0 192.168.1.10:5353 0.0.0.0:* users:(("avahi-daemon",pid=3456,fd=13))
UNCONN 0 0 [::]:68 [::]:* users:(("dhclient",pid=1234,fd=6))
UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=5678,fd=20))
UNCONN 0 0 [fe80::...]:137 [::]:* users:(("nmbd",pid=9012,fd=11))
UNCONN 0 0 [fe80::...]:5353 [::]:* users:(("avahi-daemon",pid=3456,fd=14))

PID とプログラム名が Process 列に表示されます。

注意: ss コマンドも -p オプションを使用する場合は管理者権限 (sudo) で実行する必要があります。

5.3. フィルタリング機能の活用:

ss コマンドは、特定の条件に合致するソケットのみを表示する強力なフィルタリング機能を備えています。

  • 特定のポート番号:

    ss -anu sport = 53 # 送信元ポートが 53 の UDP ソケットを表示
    ss -anu dport = 53 # 宛先ポートが 53 の UDP ソケットを表示 (ただし、UDP の場合、宛先ポートは通常表示されません)

  • 特定のIPアドレス:

    ss -anu src 192.168.1.10 # 送信元アドレスが 192.168.1.10 の UDP ソケットを表示
    ss -anu dst 192.168.1.10 # 宛先アドレスが 192.168.1.10 の UDP ソケットを表示 (ただし、UDP の場合、宛先アドレスは通常表示されません)

  • CIDR表記:

    ss -anu src 192.168.1.0/24 # 送信元アドレスが 192.168.1.0/24 ネットワーク内の UDP ソケットを表示

これらのフィルタリング機能を組み合わせることで、特定の条件に合致する UDP ソケットのみを効率的に特定できます。

6. netstat / ss UDP 情報の活用例

取得した UDP 情報をどのように活用できるか、具体的な例をいくつか紹介します。

6.1. 不正なアプリケーションの検出:

  • 身に覚えのない UDP ポートがリスン状態になっている場合、不正なアプリケーションが動作している可能性があります。PID やプログラム名を確認し、必要に応じてプロセスを停止またはアンインストールします。
  • netstat -b (Windows) または ss -anpu (Linux) を使用して、UDP ポートに関連付けられた実行ファイルを確認します。不審な名前の実行ファイルや、システムファイルではない実行ファイルが UDP ポートを使用している場合、マルウェア感染の可能性があります。

6.2. ネットワークアプリケーションのトラブルシューティング:

  • 特定のアプリケーションが UDP 通信を行っているかどうかを確認します。
  • アプリケーションが使用している UDP ポートを確認し、ファイアウォールで許可されているかどうかを確認します。
  • 複数のアプリケーションが同じ UDP ポートを使用しようとしていないかを確認します (ポート競合)。

6.3. パフォーマンス問題の特定:

  • netstat -s (Windows/Linux) で UDP の統計情報を確認し、パケット損失やエラーが多発していないかを確認します。パケット損失が多い場合、ネットワークの混雑やハードウェアの問題が考えられます。
  • Recv-Q (受信キュー) や Send-Q (送信キュー) が溜まっている場合、アプリケーションの処理能力がボトルネックになっている可能性があります。

6.4. セキュリティ監査:

  • UDP サービスが不要な場合は、無効化することで攻撃対象領域を減らすことができます。netstat / ss で UDP サービスの一覧を確認し、不要なサービスを特定します。
  • 特定の IP アドレスからの UDP トラフィックを監視し、不正なアクセスがないかを確認します。

6.5. ネットワーク設定の確認:

  • DHCP クライアント (dhclient) が正しく UDP ポート 68 でリッスンしているか確認します。
  • DNS サーバーが UDP ポート 53 でリッスンしているか確認します。

7. まとめ

netstat コマンド、特に ss コマンドは、UDP 関連の情報を取得し、ネットワークの状態を把握するための非常に強力なツールです。本記事で解説したコマンド例や活用法を参考に、ネットワーク管理、セキュリティ分析、トラブルシューティングに役立ててください。特に Linux 環境では、netstat よりも ss コマンドの利用を推奨します。

ネットワークの状態を定期的に監視し、異常な動作を早期に発見することで、ネットワークの安定性、セキュリティ、パフォーマンスを向上させることができます。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール