>>>
Select the ports to probe on 127.0.0.1. Each probe uses a no-cors fetch with a 1.2-second timeout.
✓ ACTIVE = server responded or CORS-refused (TCP listener confirmed).
✕ CLOSED = AbortError timeout (no listener on that port).
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).
127.0.0.1 via no-cors fetch with 1.2s AbortController timeout per portCheck the ports you want to test — HTTP :80, Node/React :3000, Flask :5000, Proxy :8080, MongoDB :27017, MySQL :3306, PostgreSQL :5432, or Angular :4200.
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.
The monospace terminal shows ✓ ACTIVE (server responded or CORS-refused — TCP listener confirmed) or ✕ CLOSED (AbortError timeout — no process listening) for each port.
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.
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.
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.
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.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.127.0.0.1. BunchTool's servers receive no data from this tool — the terminal log exists only inside your browser tab.
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.