PORTUnencryptedConvention, not assignment

Port 8000Development HTTP servers

Port 8000 is a common default for local development web servers, including Python's http.server, Django's runserver and PHP's built-in server. IANA assigns the port to an unrelated service (irdmi), so anything listening on 8000 is almost certainly a developer tool or an application that chose it.

BlackhawkHub Editorial · Updated

What port 8000 is used for

Port 8000 is a developer's port. It is high enough to need no special privileges, easy to type, and the default for several widely used tools:

ToolDefault commandBinds to
Python http.serverpython -m http.serverall interfaces
Djangopython manage.py runserver127.0.0.1
PHP built-in serverphp -S localhost:8000as given
Uvicorn / Gunicorn (docs examples)uvicorn app:app --port 8000127.0.0.1

Plenty of other software uses 8000 too: some Docker images publish web UIs there, and a few commercial applications use it for an API listener.

Registration versus practice

IANA lists 8000 as irdmi (Intel Remote Desktop Management Interface). That registration is old and rarely encountered. If a tool labels a port-8000 listener as "irdmi", it is reading the registry rather than identifying the program; the Port Lookup tool shows both the registry entry and the practical use.

Security considerations

  • Development servers are not hardened. Python's http.server serves the current directory to anyone who can reach it and has no access control. Bind to 127.0.0.1 unless you intend to share, and stop it when done.
  • Debug modes leak information. Django's runserver with DEBUG = True shows stack traces and settings on error pages. Never expose it beyond localhost.
  • Docker publishes broadly. -p 8000:8000 publishes on all host interfaces, which on a laptop on public Wi-Fi means anyone nearby can connect. Use -p 127.0.0.1:8000:8000 for local-only access.

How to check port 8000

Is something listening locally? On Windows, open Command Prompt and run:

cmd
netstat -ano | findstr :8000

A line in the LISTENING state means a local program has bound port 8000; the last column is its process ID (PID). Match the PID in Task Manager (Details tab) or with tasklist /fi "PID eq <pid>". On Linux or macOS the equivalent is ss -tulnp | grep :8000 or lsof -i :8000.

Can you reach it on a remote host? PowerShell's built-in connection test attempts a TCP handshake:

powershell
Test-NetConnection example.com -Port 8000

TcpTestSucceeded : True means the remote system accepted a TCP connection on port 8000. False means the port is closed, filtered by a firewall, or the host is unreachable; the output's ping result helps tell those apart.

See the netstat and Test-NetConnection records for the full option sets.

Firewall considerations

A workstation normally needs no inbound rule for 8000. Windows Defender Firewall may prompt to allow Python or Node when a server first binds a port; choosing "Private networks" only and cancelling on public networks is the safe default.

On Windows, inbound rules live in Windows Defender Firewall with Advanced Security (wf.msc). A rule allowing port 8000 only takes effect on the profile (Domain, Private, Public) it is assigned to. The command-line equivalent is netsh advfirewall firewall add rule; see the netsh record.

Frequently asked questions

Address already in use on port 8000. How do I free it?

Find the owner with netstat -ano | findstr :8000, then stop it with taskkill /PID <pid> /F if it is a stale dev server of yours. Alternatively start your server on a different port, for example python -m http.server 8001.

Can other people on my network reach my server on 8000?

Only if it binds to all interfaces (0.0.0.0) and the firewall allows it. Django's runserver binds to 127.0.0.1 by default; Python's http.server binds to all interfaces unless you pass --bind 127.0.0.1.

Sources