Toolman 100% local

Port 5000 — Flask / dev server

TCP registered

What runs on port 5000

Default for Flask, and for the .NET development server. Also AirPlay Receiver on macOS, which is why Flask often fails to bind there.

Flask's default, and also used by .NET and several others — which is why it collides so often. On macOS it collides with something less obvious: AirPlay Receiver binds 5000 by default on recent versions, so a Flask app that has always worked suddenly fails to bind after an OS upgrade. Disabling AirPlay Receiver in System Settings or moving the app resolves it.

Security considerations

On macOS, disable AirPlay Receiver in System Settings or pick another port.

Checking whether something is listening

# Linux / macOS — what is bound to the port
sudo lsof -i :5000
sudo ss -lntp | grep :5000

# Windows
netstat -ano | findstr :5000
Get-NetTCPConnection -LocalPort 5000

# is it reachable from outside?
nc -zv example.com 5000
curl -v telnet://example.com:5000

Freeing the port

# find the process, then stop it
sudo lsof -ti :5000 | xargs kill        # Linux / macOS
netstat -ano | findstr :5000            # note the PID, then:
taskkill /PID <pid> /F                    # Windows

Should this port be open to the internet?

Usually not. Expose it only if a specific external client needs it, and restrict by source address where you can.

Opening or blocking port 5000

Finding the port is usually the first half of the job. Start narrow — the second rule is there for services that genuinely serve the public, and most do not:

# ufw — Debian, Ubuntu
sudo ufw allow from 10.0.0.0/8 to any port 5000 proto tcp
sudo ufw allow 5000/tcp                   # only if it genuinely serves the public

# firewalld — RHEL, Fedora, CentOS
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/8 port port=5000 protocol=tcp accept'
sudo firewall-cmd --reload

# iptables, if you are still there
sudo iptables -A INPUT -p tcp --dport 5000 -s 10.0.0.0/8 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5000 -j DROP

# Windows
New-NetFirewallRule -DisplayName "Flask / dev server 5000" -Direction Inbound -Protocol TCP -LocalPort 5000 -RemoteAddress 10.0.0.0/8 -Action Allow

10.0.0.0/8 stands in for a private range — substitute your own. Note that a firewall rule does not undo a service bound to 0.0.0.0; it only stops packets reaching it, and a misconfigured or disabled firewall then exposes it immediately.

Quick reference

Port5000
ProtocolTCP
ServiceFlask / dev server
RangeRegistered (1024–49151) — any user process may bind

Frequently asked questions

What is port 5000 used for?

Default for Flask, and for the .NET development server. Also AirPlay Receiver on macOS, which is why Flask often fails to bind there.

Is it safe to open port 5000?

On macOS, disable AirPlay Receiver in System Settings or pick another port.

How do I check if port 5000 is open?

Locally, sudo lsof -i :5000 on macOS or Linux, or netstat -ano | findstr :5000 on Windows. From outside, nc -zv host 5000 tells you whether anything answers.

Why do I get "address already in use" on port 5000?

Another process is bound to it — often a previous run of your own program that did not exit cleanly. Find it with lsof -ti :5000 and stop it, or configure your application to use a different port.

Can I change the port this service uses?

Almost always yes, in the service's configuration. Moving off a default port reduces automated scan noise, but it is obfuscation rather than security — a real attacker scans all 65,535.

Other common ports

All port numbers