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.
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:
| Tool | Default command | Binds to |
|---|---|---|
| Python http.server | python -m http.server | all interfaces |
| Django | python manage.py runserver | 127.0.0.1 |
| PHP built-in server | php -S localhost:8000 | as given |
| Uvicorn / Gunicorn (docs examples) | uvicorn app:app --port 8000 | 127.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.serverserves the current directory to anyone who can reach it and has no access control. Bind to127.0.0.1unless you intend to share, and stop it when done. - Debug modes leak information. Django's runserver with
DEBUG = Trueshows stack traces and settings on error pages. Never expose it beyond localhost. - Docker publishes broadly.
-p 8000:8000publishes on all host interfaces, which on a laptop on public Wi-Fi means anyone nearby can connect. Use-p 127.0.0.1:8000:8000for local-only access.
How to check port 8000
Is something listening locally? On Windows, open Command Prompt and run:
netstat -ano | findstr :8000A 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:
Test-NetConnection example.com -Port 8000TcpTestSucceeded : 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.