>>>
BunchTool — Local Port Checker
🔗 Share
↺ Reset
🔌 Port Selector

Select the ports to probe on 127.0.0.1. Each probe uses a no-cors fetch with a 1.2-second timeout.

🖥️ Probe Terminal Log

✓ ACTIVE = server responded or CORS-refused (TCP listener confirmed).
✕ CLOSED = AbortError timeout (no listener on that port).

Related Tools

More free privacy tools


🛡️ Hardware & Privacy Tools

Local Port Checker —
Probe Open 127.0.0.1 Ports via Browser Fetch Free

Instantly check which local development server ports are active on 127.0.0.1 — all from inside your browser tab with BunchTool's free Local Port Checker. Each selected port is probed via a no-cors Fetch API request with a 1.2-second AbortController timeout, distinguishing live servers (CORS-refused = TCP listener confirmed) from closed ports (AbortError = no listener).

Probes 127.0.0.1 via no-cors fetch with 1.2s AbortController timeout per port
Covers HTTP :80, Node/React :3000, Flask :5000, Proxy :8080, MongoDB :27017, MySQL :3306, PostgreSQL :5432, Angular :4200
Real-time monospace terminal log: ✓ ACTIVE vs ✕ CLOSED per port
100% private — probe results stay inside your browser tab, never sent to any server
🔌
1.2sAbort Timeout
no-corsFetch Probe
8 PortsPreset Coverage
How It Works

Check local ports in three easy steps

Step 1
☑️
Select Ports to Probe

Check the ports you want to test — HTTP :80, Node/React :3000, Flask :5000, Proxy :8080, MongoDB :27017, MySQL :3306, PostgreSQL :5432, or Angular :4200.

Step 2
📡
Browser Probes 127.0.0.1

Each selected port receives a no-cors fetch request to http://127.0.0.1:{port} with a 1.2-second AbortController timeout to detect silent closed ports.

Step 3
🖥️
Read the Terminal Log

The monospace terminal shows ✓ ACTIVE (server responded or CORS-refused — TCP listener confirmed) or ✕ CLOSED (AbortError timeout — no process listening) for each port.

Why BunchTool

Why use our free Local Port Checker tool?

📡
AbortController Timeout Probing

Each port fetch is paired with AbortController + setTimeout(1200ms). An AbortError signals a truly closed port; any other error signals a CORS-rejecting live server — giving reliable open/closed distinction.

🔌
8 Developer Port Presets

Covers the most common local dev stack ports out of the box: HTTP :80, Node/React :3000, Flask/Django :5000, HTTP Proxy :8080, MongoDB :27017, MySQL :3306, PostgreSQL :5432, and Angular :4200.

🔒
Zero-Backend — Results Never Leave Browser

All fetch probes go directly from your browser to 127.0.0.1. BunchTool's servers receive no port scan data. The terminal log exists only in your browser tab's memory.

FAQ

Frequently asked questions

How does a browser probe local ports without installing software?
The tool issues fetch(url, { mode: 'no-cors' }) requests to http://127.0.0.1:{port} with a 1.2-second AbortController timeout. If the fetch resolves or throws a non-AbortError (CORS rejection from a running server), the port is ACTIVE. If AbortError fires first, the port is CLOSED.
What does 'CORS-refused — server present' mean in the log?
A CORS rejection means the local server actively received and rejected the cross-origin request. This confirms a TCP listener is running on that port. The server is ACTIVE — CORS is simply blocking the response body from being read by JavaScript.
Why does the scan show CLOSED for a port I know is open?
Chrome 94+ enforces the Private Network Access spec, which may block http://127.0.0.1 requests from pages loaded over https://. If the tool is served over HTTPS, the browser may silently fail the probe before a TCP connection is even attempted.
Which ports are checked by default?
The default selection covers the most common local dev ports: HTTP :80, Node/React :3000, Flask/Django :5000, and HTTP Proxy :8080. MongoDB :27017, MySQL :3306, PostgreSQL :5432, and Angular :4200 are available but unchecked by default.
Are the probe results sent to any server?
No. All fetch probes go directly from your browser to 127.0.0.1. BunchTool's servers receive no data from this tool — the terminal log exists only inside your browser tab.
Detailed Guide

How Browser Port Probing Works: no-cors Fetch, AbortController Timeouts, CORS Rejection Semantics & Chrome Private Network Access

no-cors fetch mechanics: fetch('http://127.0.0.1:{port}', { mode: 'no-cors' }) instructs the browser to attempt the HTTP request without exposing the response body to JavaScript. If a TCP listener accepts the connection on that port — even if it immediately responds with an HTTP 403 or CORS error — the promise catches with a TypeError (non-AbortError), which this tool interprets as ACTIVE. Only a genuine connection timeout (no TCP SYN-ACK received within the abort window) produces an AbortError.

AbortController timeout pattern: An AbortController is created per port probe. setTimeout(() => controller.abort(), 1200) fires after 1.2 seconds, triggering signal.abort() which immediately rejects the fetch promise with an AbortError. This distinguishes truly closed ports (TCP connection never established in time) from CORS-blocked ports (TCP connection was established, server responded, but response is opaque).

Chrome Private Network Access (PNA): Since Chrome 94, the browser enforces the W3C Private Network Access specification, which may preemptively block requests from public-origin pages (https://bunchtool.com) to private network addresses (127.0.0.1). If probes return CLOSED for ports you know are open, try loading this page over http:// locally, or check Chrome's DevTools Console for PNA preflight failures. Firefox and Safari currently have less strict enforcement of PNA.

Other Collections

Explore other useful categories

Explore 247 more free tools —
no login, no limits.

BunchTool covers PDF editing, text conversion, SEO analysis, calculators, design tools, unit converters and much more. All 100% free, all browser-based.

Browse All 247 tools →