0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windows このポートは誰が使っているの?

Last updated at Posted at 2024-09-14

3000ポートがすでに使われている

1.問題 bun run dev を実行するとエラーが発生した

コマンドラインから bun を実行
bun run dev を実行すると

> bun run dev

$ bun run --hot src/index.tsx
17 |    }, reportError);
18 | } else if (typeof entryNamespace?.default?.fetch === 'function') {
19 |    var server = globalThis[hmrSymbol];
20 |    if (server) {
21 |       server.reload(entryNamespace.default);
22 |       server = globalThis[hmrSymbol] = Bun.serve(entryNamespace.default);
     ^
EADDRINUSE: Failed to start server. Is port 3000 in use?
 syscall: "listen"

      at bun:main:22:49
17 |    }, reportError);
18 | } else if (typeof entryNamespace?.default?.fetch === 'function') {
19 |    var server = globalThis[hmrSymbol];
20 |    if (server) {
21 |       server.reload(entryNamespace.default);
22 |       server = globalThis[hmrSymbol] = Bun.serve(entryNamespace.default);
     ^
EADDRINUSE: Failed to start server. Is port 3000 in use?
 syscall: "listen"
EADDRINUSE: Failed to start server. Is port 3000 in use?
翻訳
EADDRINUSE: サーバーの起動に失敗しました。ポート3000は使用中ですか?

3000ポートが既に使われていて起動できないようだ

2.3000ポートをどのプログラムが塞いでいるのか?

コマンドプロンプトから確認する方法

netstat -ano で確認

PS C:\> netstat -ano

アクティブな接続

  プロトコル  ローカル アドレス      外部アドレス           状態            PID
  TCP         0.0.0.0:22             0.0.0.0:0              LISTENING       5968
  TCP         0.0.0.0:135            0.0.0.0:0              LISTENING       1644
  TCP         0.0.0.0:445            0.0.0.0:0              LISTENING       4
~~~

表示量が多すぎるので findstr を使って絞り込む

netstat -ano | findstr :3000
PS C:\> netstat -ano | findstr :3000
  TCP         0.0.0.0:3000           0.0.0.0:0              LISTENING       5968

今回はPIDが 5968 のプログラムがポートを使用している

  • タスクマネージャーから確認してみる
    Ctrl+Shift+Esc キーを押してタスクマネージャー を開きます。
    [タスクマネージャー]から[詳細] PIDでソートする

task.png

svchost.exe とは、
Windows NT 系オペレーティングシステムにおいて、複数の Windows サービスをホストするシステムプロセスです。

svshost 自体がポートを使用するプログラムではないので、svshostを使用しているプログラムを探す

ポートを使用しているプログラムは?

普通のプログラムがポートを使用しているのであれば

  • 右クリック、プロパティを表示
  • プログラムの情報が表示される
    • プログラムを終了させる

今回の svcHost.exe は何によって起動されているのか?

  • 右クリック、サービスの表示
    サービスが表示される
    service.png

iphlpsvc 5968 IP Helper が起動中

  • iphlpsvc ってなんだろう?

Windowsのiphlpsvcとは?
iphlpsvc は、Windowsのシステムサービスの一つで、正式名称は「IP Helper」サービスです。このサービスは、ネットワーク設定の管理を支援し、様々なネットワークプロトコル(IPv6、ポートプロキシなど)間の接続を円滑にする役割を果たしています。

どうやら、このプログラムが直接起動して,ポートを使っているわけではなさそうだ

別のアプローチを探す

3.別解を求める 3000ポート って開発でよく使うポートだよな?

wslで起動させたサーバーに外部からアクセスするにはポートプロキシが必要だったので、

  • [【WSL2】外部からWSL2のサービスに接続する] のPowerShellスクリプトを管理者権限で実行していた

  • ただし、再起動すると設定は消えてしまうので必要になった都度実行していた

ポートプロキシが残っているか確認してみる(ポートがどうなっているか確認)

netsh interface portproxy show all
PS C:\> netsh interface portproxy show all

ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               22          172.22.0.1      22
*               3000        172.22.0.1      3000
*               3001        172.22.0.1      3001
*               8080        172.22.0.1      8080
*               38585       172.22.0.1      38000

なぜか 3000ポートが wsl に接続されていた
以前は、再起動すると設定が消えていたのに(いつの間にか設定が残るようになった?)

wsl側でもポートが使用中か確認

wsl
sudo lsof -i:3000
# または
sudo ss -tulpn | grep :3000

wsl側では 3000 ポートを使用していなかった

ポートプロキシ設定が行われていると、wslでポートを使っていなくてもポートが使用中となる

先に押さえられているので、それは使えないですね

とりあえず、削除
管理者権限のPowerShellから

PowerShell 管理者
netsh interface portproxy delete v4tov4 listenaddress=* listenport=3000

bun を実行する

コマンドラインから bun を実行
bun run dev を実行する

> bun run dev
$ bun run --hot src/index.tsx
Started server http://localhost:3000

原因

いつの頃からかポートプロキシ設定が再起動しても消えなくなっていた

以前は起動するたびに、管理者権限のPowerShellでポートプロキシを設定しなければいけなかったのに、いつの間にかポートプロキシの設定を記憶するようになっていた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?