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.
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 publicThe 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 downThe 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 itThe 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 killEvery common port, graded up front
Same scan, four very different meanings. The colour is the point: green should answer, red never should.
Six answers a port can give
Open isn’t always bad and filtered isn’t always good — what each result actually tells you.
A web port serving, banner current. This is a port doing exactly its job — open here is the whole point.
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.
Reachable, but nothing is listening. The host answered “no service here”. Neutral — often just means this box doesn’t play that role.
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.
Remote desktop bare to the world — a constant brute-force target and a documented ransomware entry point. Put it behind a VPN.
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.
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 tableGuards 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 1918Capped 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 sweepsRate 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-targetConnect, 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-inThe same knock, from your desk
Every check here is a connect you can run yourself. The grading is the part worth automating.
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.
Keep exploring
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.