Skip to content

Port checker that grades your exposure

Enter a host and we knock once on each common port. You get open, filtered or closed per port, plus what that means: web ports should answer, admin ports belong behind a VPN, and a database answering the world gets flagged loudly.

Scan: — capped, rate-limited, public hosts only
Open / filtered / closed, distinguished Banner read where the service offers one Loud flags on exposed databases
Advanced a bare IP works too — scan the address, not just the name one TCP connect per port — no logins, no payloads JSON API — read the last result per host
What a scan turns up

Four ports people forget to close

The web ports are meant to answer. These four categories almost never are — and they’re what an attacker’s scanner is actually looking for.

The exposed database

MySQL 3306, Postgres 5432, Redis 6379, Mongo 27017 — published to 0.0.0.0 by a stray Docker flag. Only the app should ever reach these. The internet shouldn’t.

never public

The bare back door

SSH 22 and RDP 3389 reachable from anywhere. RDP is brute-forced around the clock and a documented ransomware entry point. Both belong behind a VPN or an allow-list.

lock down

The leftover staging box

An 8080 or a debug service that was “temporary” two years ago. Old code, no WAF, forgotten by everyone but the scanners that catalogue it.

retire it

The plaintext relic

FTP on 21, Telnet on 23 — credentials crossing the wire in the clear. If it’s answering, it’s a sniffable login waiting to happen.

encrypt or kill
The 14-port preset

Every common port, graded up front

Same scan, four very different meanings. The colour is the point: green should answer, red never should.

:21
FTP
retire
:22
SSH
lock down
:25
SMTP
role only
:53
DNS
role only
:80
HTTP
public ok
:110
POP3
role only
:143
IMAP
role only
:443
HTTPS
public ok
:3306
MySQL
never public
:3389
RDP
lock down
:5432
PostgreSQL
never public
:6379
Redis
never public
:8080
HTTP-alt
proxy it
:27017
MongoDB
never public
public ok · role only · lock down · never public — an open port is read against this grade, not printed raw.
Readout decoder

Six answers a port can give

Open isn’t always bad and filtered isn’t always good — what each result actually tells you.

:443 open · nginx/1.25

A web port serving, banner current. This is a port doing exactly its job — open here is the whole point.

→ as intended
:22 filtered

The knock got no reply — a firewall dropped the packet silently. For an admin or database port, this is the state you want: the service can’t even be confirmed to exist.

→ the firewall is working
:25 closed

Reachable, but nothing is listening. The host answered “no service here”. Neutral — often just means this box doesn’t play that role.

→ nothing home, and that’s fine
:3306 open · MySQL

A database answering the public internet. Anyone who reaches the IP can attempt to connect. This is the flag a raw open/closed scanner never raises.

→ bind to 127.0.0.1 now
:3389 open · RDP

Remote desktop bare to the world — a constant brute-force target and a documented ransomware entry point. Put it behind a VPN.

→ VPN or allow-list only
:22 open · OpenSSH_6.6

SSH reachable, and the banner names a release series that left support years ago. Open admin plus an ageing daemon is the combination worth acting on first.

→ patch, key-only, or hide it
How to read the result

One connect, three answers

A raw scanner prints “open” or “closed”. The useful distinction is a third state — and what each one lets you conclude.

  • Open — the handshake completed. A service is listening and reachable. Whether that’s good depends entirely on which port.
  • Filtered — no usable answer. A firewall either dropped the packet silently or refused it with an ICMP unreachable; either way the port can’t be confirmed. For admin and database ports, this is the goal.
  • Closed — the host actively refused with a TCP reset. Reachable, but nothing is listening. Neutral, and louder than filtered about the host being up.

What a port scan can tell you

the no-overclaim table
reachability — solidWhether a port answers from the public internet is a fact we can state plainly. That’s the whole job.
exposure — solidA database or admin port answering the world is a real, gradeable risk regardless of what’s behind it.
“vulnerable” — noOpen ≠ exploitable. A patched, authenticated service on an open port can be perfectly safe. We flag exposure, not a specific CVE.
app bugs — noWe knock on the door; we don’t test the app behind 443. SQL injection, auth flaws — a different tool entirely.
exploitation — neverOne connect, a banner read where the service volunteers one, disconnect. We never attempt a login. A knock, by design.
Scanning, responsibly

Guards that keep this a diagnostic

A port scanner is a dual-use tool. These guards are the difference between a diagnostic and a weapon — and they’re not optional here.

Public hosts only

Private ranges (RFC 1918), loopback, link-local and carrier NAT are refused — in the probe as well as the app. You can’t use our network to reach into someone’s internal one.

no RFC 1918

Capped scope

The 14-port preset, a single port, or a bounded range of at most 64. No 1–65535 sweeps — the ceiling is enforced at both ends, not just in this form.

no full sweeps

Rate limited both ways

Throttled per source and per target. The second one is what stops the tool being pointed at one host over and over, however many sources try.

per-source and per-target

Connect, then leave

One TCP handshake, a banner where the service offers one, disconnect. On HTTP and HTTPS ports a single HEAD request, nothing more. No logins, no payloads.

a knock, not a break-in
Only scan hosts you’re responsible for. Scanning infrastructure you don’t own or have permission to test can breach acceptable-use policies, and in some jurisdictions the law.
For terminal people

The same knock, from your desk

Every check here is a connect you can run yourself. The grading is the part worth automating.

One port, is it open?nc -zv -w3 your-server.example 3306
The common presetnmap -Pn -p 21,22,25,53,80,110,143,443,3306,3389,5432,6379,8080,27017 your-server.example
Read a banner without sending anythingnc -w3 your-server.example 22 < /dev/null
Check what your own box exposes, from your own boxss -tlnp | grep -v 127.0.0.1
Only ever against hosts you own# scanning others may breach AUP — this tool enforces that for you
FAQ

Common port checker questions

Open means the TCP handshake completed — a service is listening and reachable. Closed means the host answered with a reset but refused the connection — reachable, nothing listening on that port. Filtered means no usable answer came back at all: a firewall either dropped the packet silently, or refused it with an ICMP unreachable message. Either way you can’t confirm a service is there. For a database or admin port that is the state you want: an attacker’s scanner learns nothing either.

It’s the most serious thing this tool looks for. Databases like MySQL, PostgreSQL, Redis and MongoDB are meant to be reached only by your application over a private network. When one answers the public internet, anyone who reaches the IP can attempt to connect. Usually a container published its port to 0.0.0.0 instead of loopback. Redis in particular is designed for a trusted network and has no authentication unless you configure it. We never send a command or attempt a login, so we can’t say whether an attacker would get in. What we can say is that the door answered, and internet-wide scanners catalogue open database ports continuously. Bind the service to 127.0.0.1 or firewall the port today.

No. Open means reachable, not compromised and not necessarily exploitable. A fully patched, authenticated service on an open port can be perfectly safe — 443 is open on every HTTPS site you use. What we grade is exposure: whether a port that shouldn’t face the public internet is doing so anyway. We don’t test the application behind the port, and we never attempt a login or send an exploit. For actual vulnerability testing you’d want a dedicated scanner, run with permission.

Scan hosts you own or have explicit permission to test, and you’re on solid ground. Port-scanning third-party infrastructure without permission can breach acceptable-use policies and, in some jurisdictions, laws. This tool ships guards to keep it a diagnostic and not a weapon. It refuses private, loopback, link-local and carrier-NAT addresses, in the probe as well as the app, so a bypass of one still hits the other. Scope is capped at the common preset, one port, or a bounded range rather than a full sweep. Scans are rate-limited per source and per target. Each port gets one TCP connect: a banner is read where the service volunteers one, then we disconnect.

Almost always nothing. Many services announce themselves the moment you connect. An SSH daemon sends SSH-2.0-OpenSSH_9.9; an SMTP server sends a 220 greeting; MySQL sends a handshake carrying its version. For those we write zero bytes and read what was volunteered. Three exceptions. On plain HTTP ports we send one HEAD / HTTP/1.0 request to read the Server header. On 443 and 8443 we finish the TLS handshake, record the negotiated version and certificate, then send that same HEAD inside it. Other TLS ports get the handshake only. That’s the entire list. We never send a protocol command, not even a Redis PING, and never a credential. Every result page tells you which of those applied to your scan.

Because that’s the firewall working. If a port comes back filtered, a device between us and the service refused or dropped the packet. We can’t distinguish “no service” from “service, hidden”, and we don’t pretend to. Behind a CDN or load balancer you’re scanning the edge, not your origin. The numbers describe what the proxy exposes, which is why an open 8080 on a CDN edge is normal rather than alarming. That’s a feature: putting a service behind a firewall is meant to hide it from scanners like this one.

Because for a port scan it rarely changes the answer. A port open to the internet is open from everywhere. Multi-location matters for latency and geo-routed availability, which our Ping Test and country tools cover. We spend the effort on reading the result instead: grading exposure, separating a silent drop from an explicit refusal, and flagging the database ports that raw scanners leave you to interpret alone.

Free tools are just the start.
Uptimia keeps your sites healthy.

Uptime, SSL, domain expiry, page speed, transactions — monitored from 171+ locations worldwide. Free for 30 days.

30 days free no credit card cancel anytime free plan after trial
100,000+ websites monitored · GDPR-compliant