ネットワークの調査に役立つWindowsコマンド

ネットワークの調査に役立つWindowsコマンド

自宅や会社などで、ネットワーク関連の問題に遭遇した場合、トラブルシューティングとしてまず行うのは、疎通・経路・設定などの確認です。

Windows環境だと、これらの確認にWindowsコマンドを使った方法が一般的ですが、PowerShellコマンドレットにも、ネットワークのトラブルシューティングに役立つコマンドレットがいくつか用意されています。

そこでここでは、ネットワークの状況チェックをする際に役立つWindowsコマンドやPowerShellコマンドレットを紹介します。

ネットワーク疎通の確認

pingコマンド

Windowsコマンドで疎通を確認したいときは、指定した宛先とのネットワーク疎通や応答時間を確認できるpingコマンドを使います。

pingコマンドは、以下のように実行します。

> ping <宛先のIPアドレスやホスト名>

pingコマンドを実行すると、デフォルトでは指定した宛先に32バイトのパケットを4回を送信して、応答時間やパケットの損失がないかなどを確認することができます。

なお、pingコマンドを実行する際、初めの1回目はARPによる名前解決(MACアドレスとIPアドレスの紐づけ)が行われ若干の遅延が発生するため、より正確な測定を行いたい場合は、はじめに1回だけpingを実行して名前解決を済ませてから、改めてpingコマンドを実行することで、比較的正確な測定ができます。

ネットワークの調査に役立つWindowsコマンド

送信回数を指定して実行

pingコマンドはデフォルトで宛先に4回だけパケットを送信します。ですが、ネットワークの遅延やパケットの消失を調べる場合、4回では足りない場合が多々あります。

ネットワークの調査に役立つWindowsコマンド

そのようなときは、「-n」オプションでパケットの送信回数を指定でき、たとえば、10回送信したい場合は、次のように実行します。

> ping -n 10 <宛先のIPアドレスやホスト名>

回数を指定せず実行

-nオプションでは回数を指定して実行できますが、回数を指定せず実行し続けたい場合は「-t」オプションを利用します。

実行方法は、次のとおりです。

> ping -t <宛先のIPアドレスやホスト名>

なお、コマンドの実行を終了するには「Ctrl」+「C」キーを押し、途中経過の情報を表示するには「Ctrl」+「Break」キーを押します。

pingコマンドの終了コード

バッチファイルなどでpingコマンドを実行して、終了コードによって結果を判定する場合には注意が必要です。

Windowsコマンドの多くは、正常終了した場合は終了コードとして「0」異常終了した場合は「1」以上が返されERRORLEVERL変数に格納されることが一般的ですが、pingコマンドでは以下のような終了コードが返されます。

終了コード説明
0宛先から応答があった場合
0宛先へ到達できない場合
1タイムアウトした場合
1宛先の名前解決が失敗した場合
-1073741510コマンドを途中でキャンセルした場合

上のように、pingコマンドでは宛先に到達できなかった場合でも、終了コードとして「0」が返ってくるため、宛先への疎通をpingコマンドで判定する場合は、終了コードではなく標準出力に表示される応答メッセージの内容で判定するとよいでしょう。

応答メッセージの内容には、宛先と疎通できた場合のみ表示される文字列があるため、その文字列の有無をfindstrコマンドでチェックすることで、疎通を判定できます。

たとえば、宛先と疎通できた場合「ラウンド トリップの概算時間」という文字列が表示されるため、その文字列の有無で疎通を判定できます。

> ping -n 2 192.168.1.100 | findstr "ラウンド トリップの概算時間"
PS> Test-Connection "ホスト名またはIPアドレス"

Test-Connectionコマンドレット

PowerShellで疎通を確認したいときは、Test-Connectionコマンドレットを使います。

Test-Connectionコマンドレットは、以下のように実行します。

PS> Test-Connection <宛先のIPアドレスやホスト名>

また、Test-Connectionコマンドレットは、リモートマシンから実行させることもできます。

たとえば、リモートマシン「PC-002」に「user01」で接続して、リモートマシンを発信元として、宛先「yahoo.co.jp」に疎通を確認する場合は、次のようにコマンドを実行します。

PS> Test-Connection -ComputerName yahoo.co.jp -Source pc-002 -Credential user01

コマンドの実行結果は、以下の画像のようになります。

ネットワークの調査に役立つWindowsコマンド

なお、Test-Connectionコマンドレットをリモートマシンから実行するには、事前の設定が必要になるので、詳しくは以下の記事の「事前設定」欄をご覧ください。

リモートのWindowsをコマンドで(一括)再起動、シャットダウンする方法
リモートのWindowsをコマンドで(一括)再起動、シャットダウンする方法
PowerShellコマンドレット「Restart-Computer」「Stop-Computer」を使って、リモートのWindowsを再起動/シャットダウンする方法を紹介します。

ネットワーク経路の確認

tracertコマンド

Windowsコマンドで指定した宛先に到達するまでに経由したルーター(ホスト)と応答時間を確認したいときは、tracertコマンドを使います。

tracertコマンドは、以下のように実行します。

> tracert <宛先のIPアドレスやホスト名>

tracertコマンドを実行すると、指定した宛先に到達するまでに経由したルーター(ホスト)が一覧表示され、経由したルーターごとの応答時間(3回分)を確認することができます。

以下の画面では、宛先に到達するまでに9台のルーターを経由していることが分かります。

ネットワークの調査に役立つWindowsコマンド

tracertコマンドは、ローカルネットワーク上ではあまり利用することはないコマンドですが、インターネット上のホストととの通信でトラブルが発生した場合は、tracertコマンドを利用することで、経路の途中でトラブルが発生しているのかなどを確認することができます。

なお、経路上のルーターの応答時間が大きい場合がありますが、最終的な宛先との通信には影響しない場合がほとんどです。

pathpingコマンド

宛先への疎通と経路をまとめて確認したいときは、pathpingコマンドが便利です。

pathpingコマンドは、以下のように実行します。

> pathping <宛先のIPアドレスやホスト名>

pathpingコマンドを実行すると、指定した宛先に到達するまでに経由したルーターの一覧と、経路の状況が表示されます。

210.XXX.XXX.XXX へのルートをトレースしています。経由するホップ数は最大 30 です

  0  192.168.XXX.XXX
  1  192.168.XXX.XXX
  2  192.168.XXX.XXX
  3  211.XXX.XXX.XXX
  4  211.XXX.XXX.XXX
  5  118.XXX.XXX.XXX
  6  153.XXX.XXX.XXX
  7  60.XXX.XXX.XXX
  8  60.XXX.XXX.XXX
  9  118.XXX.XXX.XXX
 10  210.XXX.XXX.XXX

統計を 250 秒間計算しています...
            ソースからここまで   このノード/リンク
ホップ  RTT    損失/送信 = Pct  損失/送信 = Pct  アドレス
  0                                           192.168.XXX.XXX
                                0/ 100 =  0%   |
  1    2ms     0/ 100 =  0%     0/ 100 =  0%  192.168.XXX.XXX
                                0/ 100 =  0%   |
  2    2ms     0/ 100 =  0%     0/ 100 =  0%  192.168.XXX.XXX
                                0/ 100 =  0%   |
  3    3ms     0/ 100 =  0%     0/ 100 =  0%  211.XXX.XXX.XXX
                                0/ 100 =  0%   |
  4    5ms     0/ 100 =  0%     0/ 100 =  0%  211.XXX.XXX.XXX
                                0/ 100 =  0%   |
  5    7ms     0/ 100 =  0%     0/ 100 =  0%  118.XXX.XXX.XXX
                                0/ 100 =  0%   |
  6    8ms     0/ 100 =  0%     0/ 100 =  0%  153.XXX.XXX.XXX
                                0/ 100 =  0%   |
  7    7ms     0/ 100 =  0%     0/ 100 =  0%  60.XXX.XXX.XXX
                                0/ 100 =  0%   |
  8    6ms     0/ 100 =  0%     0/ 100 =  0%  60.XXX.XXX.XXX
                                0/ 100 =  0%   |
  9    7ms     0/ 100 =  0%     0/ 100 =  0%  118.XXX.XXX.XXX
                                1/ 100 =  1%   |
 10    6ms     1/ 100 =  1%     0/ 100 =  0%  210.XXX.XXX.XXX

トレースを完了しました。

結果画面の見方

pathpingコマンドの結果画面は、大きく2つのパートに分かれており、前半部分には、宛先までの経路上にあるルーターのIPアドレス一覧が表示されます。

以下の結果では、宛先に到達するまでに9台のルーターを経由したことが分かります。

210.XXX.XXX.XXX へのルートをトレースしています。経由するホップ数は最大 30 です

  0  192.168.XXX.XXX …自分のマシン
  1  192.168.XXX.XXX
  2  192.168.XXX.XXX
  3  211.XXX.XXX.XXX
  4  211.XXX.XXX.XXX
  5  118.XXX.XXX.XXX
  6  153.XXX.XXX.XXX
  7  60.XXX.XXX.XXX
  8  60.XXX.XXX.XXX
  9  118.XXX.XXX.XXX
 10  210.XXX.XXX.XXX …宛先のマシン

後半部分には、経路上のルーターごとの応答時間(RTT)やパケットの損失率、ルーター間のパケット損失率といった統計情報が表示されます。

統計を 250 秒間計算しています...
            ソースからここまで   このノード/リンク
ホップ  RTT    損失/送信 = Pct  損失/送信 = Pct  アドレス
  0                                           192.168.XXX.XXX
                                0/ 100 =  0%   |
  1    2ms     0/ 100 =  0%     0/ 100 =  0%  192.168.XXX.XXX
                                0/ 100 =  0%   |
  2    2ms     0/ 100 =  0%     0/ 100 =  0%  192.168.XXX.XXX
                                0/ 100 =  0%   |
  3    3ms     0/ 100 =  0%     0/ 100 =  0%  211.XXX.XXX.XXX
                                0/ 100 =  0%   |
  4    5ms     0/ 100 =  0%     0/ 100 =  0%  211.XXX.XXX.XXX
                                0/ 100 =  0%   |
  5    7ms     0/ 100 =  0%     0/ 100 =  0%  118.XXX.XXX.XXX
                                0/ 100 =  0%   |
  6    8ms     0/ 100 =  0%     0/ 100 =  0%  153.XXX.XXX.XXX
                                0/ 100 =  0%   |
  7    7ms     0/ 100 =  0%     0/ 100 =  0%  60.XXX.XXX.XXX
                                0/ 100 =  0%   |
  8    6ms     0/ 100 =  0%     0/ 100 =  0%  60.XXX.XXX.XXX
                                0/ 100 =  0%   |
  9    7ms     0/ 100 =  0%     0/ 100 =  0%  118.XXX.XXX.XXX
                                1/ 100 =  1%   |
 10    6ms     1/ 100 =  1%     0/ 100 =  0%  210.XXX.XXX.XXX

トレースを完了しました。

上の結果では、9番目のルーターと最終的な宛先の間で若干のパケットの損失を確認できますが、最終的な宛先に対する応答時間(RTT)は6msのため、特に問題ないと判断できます。

最終的な宛先の応答時間が大きい場合や、ルーター間の損失率が大きい場合は、ネットワークの混雑が予想されます。 

なお、デフォルト設定では、経路上の各ルーターに対してICMPのEchoパケットを0.25秒間隔で100回送信し、応答時間(RTT)やパケットの損失率を算出するため、ルーターごとに25秒(0.25秒間隔×100パケット分)必要となり、上の例では結果が表示されるまでに250秒(25秒×10台分)かかりますが、コマンドにオプションを指定することで、送信間隔や送信パケット数は変更することができます。

Test-NetConnectionコマンドレット

PowerShellでネットワーク経路を確認したいときはTest-NetConnectionコマンドレットを使います。

Test-NetConnectionコマンドレットに「-traceroute」オプションを付けて実行することで、tracertコマンドと同じように、宛先までの経路を確認することができ、問題がある場合には、経路上のどこに問題があるかを確認することができます。

PS> Test-NetConnection "ホスト名またはIPアドレス" -traceroute 

ポートへの接続確認

Test-NetConnectionコマンドレット

Windowsでリモートマシンの特定のポートへの接続を確認したい場合、かつてはtelnetコマンドを使うのが一般的でしたが、Windows 11ではPowerShellのTest-NetConnectionコマンドレットを使うのが一般的です。

Test-NetConnectionコマンドレットは、以下のように実行します。

PS> Test-NetConnection <ホスト名またはIPアドレス> -Port <ポート番号>

なお、Windows環境でリモートのサービスへの接続を確認する方法は、別記事で詳しく解説しています。

通信の接続状態を確認

netstatコマンド

WindowsコマンドでTCP/IP通信の接続状態を確認したいときは、netstatコマンドを使います。

netstatコマンドを利用すれば、現在どの宛先と通信しているのかや、サーバーソフトウェアなどが稼働している環境では、待ち受けポートの状態を確認することができます。

> netstat -a

Get-NetTCPConnectionコマンドレット

PowerShellでTCP/IP通信の接続状態を確認したいときは、Get-NetTCPConnectionコマンドレットを使います。

Get-NetTCPConnectionコマンドレットは、netstatコマンドに相当するコマンドで、現在のTCP接続の状況を確認できます。たとえば、接続が確立済み、待ち受け中などの状況を確認することができます。

PS> Get-NetTCPConnection

名前解決の確認

nslookupコマンド

Windowsコマンドで、DNSのサーバと正しく通信できているかや名前解決などができるかを調査したいときはnslookupコマンドを使います。

たとえば「www.google.co.jp」の名前解決ができるか確認したいときは、以下のように実行します。

> nslookup www.google.co.jp ←正引き:ドメイン名からIPアドレスを調べる

ネットワークの調査に役立つWindowsコマンド

> nslookup 8.8.8.8 ←逆引き:IPアドレスからドメイン名を調べる

ネットワークの調査に役立つWindowsコマンド

また、デフォルトではネットワークインターフェースに設定されているDNSサーバーと通信が行われますが、接続するDNSサーバーを指定することもできます。

たとえば、DNSサーバーとして「1.1.1.1」を使用して調査したいときは、以下のように実行します。

> nslookup www.google.co.jp 1.1.1.1

ネットワークの調査に役立つWindowsコマンド

Resolve-DnsNameコマンドレット

PowerShellで、DNSのサーバと正しく通信できているかや名前解決などができるかを調査したいときはResolve-DnsNameコマンドレットを使います。

Resolve-DnsNameコマンドレットは、nslookupに相当するコマンドで、指定したホスト名の名前解決の状況を確認することができます。

PS> Resolve-DnsName -Name "ホスト名"

また「-server」スイッチでDNSサーバーを指定して実行すれば、指定したDNSサーバーでの名前解決の状況を確認することもできます。

ルーティングテーブルの確認

routeコマンド

宛先ネットワークへの経路情報を確認したり、新たな経路情報を登録したいときはrouteコマンドを使います。

現在の経路情報を確認したいときは、以下のように実行します。

> route print

静的な経路(スタティックルート)を新たに登録したいときは、以下のように実行します。

> route -p add <ネットワーク> mask <サブネット> <ゲートウェイ> [if <インターフェース番号>]

たとえば、宛先ネットワーク(172.16.1.0/24)へのゲートウェイとして192.168.0.254を指定したいときは、以下のように実行します。

> route -p add 172.16.1.0 mask 255.255.255.0 192.168.0.254

ネットワークアダプターの設定確認

ipconfigコマンド

Windowsコマンドでネットワークアダプタごとの設定情報を確認したいときは、ipconfigコマンドを使います。

ipconfigコマンドを実行すると、ネットワークアダプターごとの設定情報を確認でき「/all」オプションを付けて実行すれば、DNSサーバーやMACアドレスといったより詳細な情報も確認できます。

> ipconfig

Get-NetIPConfigurationコマンドレット

PowerShellでネットワークアダプタごとの設定情報を確認したいときは、Get-NetIPConfigurationコマンドレットを使います。

Get-NetIPConfigurationコマンドレットは、ipconfigに相当するコマンドで、ネットワークアダプタごとの設定情報を一覧表示でき、アダプターごとのIPアドレス・DNSサーバーアドレス、ゲートウェイアドレスなどを確認できます。

PS> Get-NetIPConfiguration

また「/Detailed」オプションを付けて実行すれば、MTU値やMACアドレスといったより詳細な情報も確認できます。

DNSキャッシュのクリア

Windowsでは、名前解決の記録がローカルマシンにDNSキャッシュとして保存されており、名前解決に問題が生じている場合には、以下に挙げるコマンドでDNSキャッシュをクリアできます。

ipconfigコマンド

WindowsコマンドでDNSキャッシュのクリアしたいときは、ipconfigコマンドに「/flushdns」オプションを付けて実行します。

> ipconfig /flushdns

Clear-DnsClientCacheコマンドレット

PowerShellでDNSキャッシュのクリアしたいときは、Clear-DnsClientCacheコマンドレットを使います。

PS> Clear-DnsClientCache

IPアドレスのリリースと更新

ipconfigコマンド

DHCPにより配布されたIPアドレスのリリース(解放)や更新を行いたいときは、ipconfigコマンドにオプションを付けて実行します。

たとえば、IPアドレスをリリースするときは、以下のようにコマンドを実行します。(ネットワークアダプター名を指定してリリースすることもできます。)

> ipconfig /release

IPv6アドレスをリリースするときは、以下のようにコマンドを実行します。

> ipconfig /release6

IPアドレスを更新したいときは、以下のようにコマンドを実行します。

> ipconfig /renew

IPv6アドレスを更新したいときは、以下のようにコマンドを実行します。

> ipconfig /renew6

なお、PowerShellでは、DHCPにより配布されたIPアドレスのリリースや更新ができるコマンドレットがないので、Invoke-Commandコマンドレットから、ipconfigコマンドを呼び出してIPアドレスのリリースや更新を行います。

PS> Invoke-Command -ScriptBlock {ipconfig /release}
PS> Invoke-Command -ScriptBlock {ipconfig /renew}

あとがき

以前までは、Windowsでネットワーク関連の調査を行う際は、Windowsコマンドを使うことが多かったですが、PowerShellでも大抵のことは対応できそうです。ご活用あれ。