How to Check Open Ports
The commands to list listening ports on Windows, Linux and macOS — and to test whether a specific port is reachable across the network.
Published
netstat -ano or Get-NetTCPConnection -State Listen · Linux → ss -tulpn · macOS → lsof -i -P -n | grep LISTEN · test a remote port → nc -zv host port.
Listing open ports on your own machine
An "open port" on your own machine means a process is listening on that port, waiting for connections. Each OS ships a tool for this — the goal is always the same: which port, which process, which interface.
Windows
netstat -ano | findstr LISTENING
# -a all connections and listening ports
# -n numeric addresses (no DNS lookups)
# -o show the owning process ID (PID)
Map a PID to a process name with tasklist /FI "PID eq 1234", or use PowerShell to do it all in one step:
Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess,
@{n="Proc";e={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}}
Linux
ss -tulpn
# -t TCP
# -u UDP
# -l listening only
# -p show the owning process
# -n numeric ports (skip service-name lookup)
netstat -tulpn still works on most distributions but ss is the recommended tool — it reads kernel state directly and is faster and more accurate with modern sockets. To see only one port: ss -tulpn | grep ':443'.
macOS
sudo lsof -i -P -n | grep LISTEN
# -i network files (sockets)
# -P numeric ports
# -n numeric addresses (skip DNS)
macOS ships netstat too, but its flags differ from Linux and the output is terse; lsof is the reliable, portable choice. It needs sudo to see processes owned by other users.
Testing a port on another machine
Listing local ports is one thing; the more common question is "can I reach that host on that port?" — a firewall, routing or service-down question.
# Windows — PowerShell, checks TCP reachability
Test-NetConnection -ComputerName example.com -Port 443
# macOS / Linux — netcat; 0 exit code means success
nc -zv example.com 443
# Anywhere — PowerShell alternative
tnc example.com -Port 443
# Scan several ports at once with nmap
nmap -p 80,443,22 example.com
Success means a TCP handshake completed — something is listening and reachable. Failure means one of three things, which you narrow down in order: the service is down, a firewall is blocking you, or the host itself is unreachable. Check the host first with ping or Test-Connection, then move inward.
Frequently asked questions
What is the difference between a listening and an established port?
A listening port has a server waiting for incoming connections (shown as LISTEN in netstat/ss). An established port belongs to an active connection that has already completed its handshake. When you "check open ports" on a server you usually mean the listening ones.
What does it mean when a port is filtered or closed?
Closed means the host replied "nothing is listening here". Filtered (the common firewall result) means there was no reply at all — a firewall dropped the packet — so you cannot tell whether a service exists. That is why a port can look "closed" from outside while the service is fine and simply firewalled.
Why do I need sudo to see the process name?
Listing ports is usually allowed for any user, but mapping a port to a process owned by another user (root, or a service account) requires elevated privileges. On Linux add sudo to ss -tulpn; on macOS lsof needs sudo for the same reason.
How do I find which process is using a specific port?
Windows: netstat -ano | findstr :443 then tasklist /FI "PID eq
Related references
- Common TCP/UDP ports — an IANA-checked table of the ports you will recognize.
- PowerShell one-liners — includes port and connection cmdlets.
- Linux networking cheat sheet — ss, ip, ping and friends in context.