Bean Network Tester

このポートを使っているのはどのプログラム?

サーバーが8080番ポートで起動しない、あるいはテストが「address already in use」で止まる。原因は、すでにプログラムがそのポートを使っているか、Windowsがそのポートを予約しているかのどちらかで、2つのエラーはよく似ています。見分け方を説明します。

ポートが開けない2つの理由

何が起きたか現れ方対処
プログラムがポートを使っているエラーは、アドレスがすでに使用中だと伝えます(EADDRINUSE、またはWindowsのエラー10048)。そのプログラムはソケット一覧に現れます。そのプログラムを閉じるか、別のポートを選びます。
Windowsがポートを予約している待ち受けているものがないのに、アクセスが禁止されていると表示されます(Windowsのエラー10013)。一覧にはプログラムが現れません。予約範囲の外のポートを選ぶか、その範囲を解放します。WinNATサービスの再起動で解決することがよくあります。

Windowsに最初からあるもので調べる

ソケット一覧には所有者がプロセスIDで載っています。ポートを探し、次にIDを調べます。

netstat -ano | findstr :8080
tasklist /fi "PID eq 4321"

PowerShellでも同じことができます(TCPとUDPの両方)。

Get-NetTCPConnection -LocalPort 8080 | Select-Object LocalAddress, State, OwningProcess
Get-NetUDPEndpoint -LocalPort 5353 | Select-Object LocalAddress, OwningProcess
Get-Process -Id 4321

ポートを握っているプログラムがない場合は、Windowsが確保している範囲を調べます。

netsh int ipv4 show excludedportrange protocol=tcp

protocol=udp でもう一度実行してください。範囲はプロトコルごとに管理されるため、UDPでは空いていてTCPでは予約されているポートもあります。

Toolsタブで調べる

Toolsタブなら、コンソールなしで同じことを調べられます。

答えが「はい・いいえ」ではなく表になるのはそのためです。Windowsはプロトコルごとに範囲を予約しますし、IPv6で待ち受けるプログラムは、IPv4では空いているポートを握っていることがあります。

ネットワークには何も送りません。各ポートについて、このコンピューター自身のループバックアドレスでWindowsにポートを求め、すぐに返します。

持ち主が分かったら

どちらの表でも、行を右クリックすると、そのポートを握っているプログラムを対象に設定できます。入力欄が埋まるだけで、START を押すまで何も変わりません。その先は1つのアプリだけを狙うを参照してください。

できないこと

読み取るだけで、修復はしません。プログラムを閉じることも、予約範囲を解放することもありません。別のアカウントのソケットは、管理者として実行しない限りプログラムが表示されません。

次のステップ

自分のネットワークを、わざと壊してみませんか?

Windows版をダウンロード