English · Русский
A Chrome side panel that records every network destination the active tab contacts — hostnames, resolved IP addresses, WebSocket handshakes — and keeps that record exact, readable and copyable.
It is made for people who want to see where a page sends requests without being handed a scary number. Exact evidence comes first, interpretation is always labelled as interpretation, and nothing leaves the browser: the extension makes no network requests of its own and never collects the values a page reads.
- Every destination of the active tab — hostname or direct IP, first or third party, what kind of request it was, and how many times it was seen.
- All resolved IP addresses per hostname, not just the last one, with first and last time seen.
- How the destination was reached — plain
httpandwsare stated in the row, and so is a request made by the site's own service worker rather than by the page. - Page API use — canvas readback, WebGL renderer, audio, timezone, language, geolocation and high-entropy UA hints. Only the fact of the call is recorded, never the value, and the summary is always labelled a heuristic.
- One record per tab, per site. Paths and subdomains keep accumulating; moving to another registrable domain starts a fresh record without touching the other tabs.
Enable Show ports below the display modes when you need host:port or IP:port.
The choice is remembered, and search and all copy actions follow the displayed format.
Different ports remain separate even in the grouped view; IPv6 uses [address]:port.
Ports come from request URLs (including protocol defaults such as HTTPS 443), not from
socket telemetry. Old records with no port remain unchanged. Arbitrary TCP/UDP traffic
is outside the browser's webRequest API.
Note
DomainScan is not in the Chrome Web Store yet, so it is installed unpacked.
- Download
domainscan-vX.Y.Z.zipfrom Releases and unpack it, or clone this repository. - Open
chrome://extensionsand turn on Developer mode. - Choose Load unpacked and select the unpacked folder.
- Click the DomainScan toolbar icon to open the side panel.
Chrome 114 or newer is required.
The list fills as you browse and never rearranges itself under your hands: an open list of IP addresses, the focused control and the scroll position survive every incoming request.
In Domains view, expand "Observed hosts" to inspect and copy the exact hostnames behind a group. Filters narrow the list by origin, feature (WebSocket, unencrypted request or service worker) and request type before grouping; search and copy actions use the filtered rows. "Mark now" shows new destinations and repeat requests observed after that point in the current site session.
Long lists show 200 rows at a time without discarding observations. If session storage nears its limit or a write fails, the panel offers a JSON export of the current tab and an explicit clear action. The export is user initiated and stays on the user's computer.
Three display modes transform the view, and none of them deletes anything:
| Subdomains folded into the parent | Grouped by registrable domain |
|---|---|
![]() |
![]() |
Copy actions are separate and say what they copy: all visible domains, all visible IP addresses, or the rows you ticked.
Recording pauses per tab, and watching page API use can be switched off for one site or entirely. Page API observation modifies browser functions and can conflict with site protections. Switching it off does not undo changes in an already-loaded page: close and reopen the tab. Site exclusions cover that site's URLs and subdomains; embedded pages from other sites may still be instrumented. For compatibility testing, switch API observation off entirely and open a fresh tab. Network recording continues in this mode, and no DomainScan scripts are injected into fresh pages. Passing a local compatibility check does not guarantee acceptance by any site's anti-bot service. An anonymized manual check reported restored access with the revised API-off mode; see the compatibility note for the exact change and limits.
DomainScan calls no GeoIP, analytics or telemetry service. It observes browser events locally and does not collect the values returned by timezone, language, location, Canvas, WebGL, audio or User-Agent Client Hints APIs. Production code has no runtime dependencies.
| Permission | Why it is needed |
|---|---|
webRequest |
Observing request and response metadata without blocking or modifying traffic. |
storage |
Keeping each tab's record across service-worker suspension. |
sidePanel |
The panel itself. |
scripting |
Registering the page probe at runtime, which is what makes it switchable per site. |
<all_urls> host access |
Observing destinations on arbitrary sites and instrumenting their pages. |
The tabs permission is deliberately not requested: tab identifiers, activation events and the
committed tab URL that decides the current site are all available through host permissions.
- A resolved IP address is available only when Chrome reports one; cached responses may omit it.
- For WebSockets the opening handshake is visible, never the messages.
- An API-use signal proves a call happened. It does not prove intent, success, or that the value was used — which is why the panel says "possible" and never scores a site.
- A service worker's requests are recorded while a tab shows its origin; what a worker does with no such tab open, and what a prerendered page contacts before you open it, is not recorded rather than attributed to the wrong site.
- Records live in session storage: closing a tab drops its record, and closing the browser drops all of them.
Node.js 22 is the supported runtime.
npm ci
npm run verify # syntax, manifest and locale parity, generated PSL, unit tests
npx playwright install chromium
npm run test:e2e # loads the unpacked extension in ChromiumThe panel can be opened outside Chrome for design work — serve the repository with
python3 -m http.server 8080 and open /src/sidepanel/panel.html; it detects the missing chrome
API and runs on sample data with every control working.
- docs/README.md - documentation index and scope of verification.
- CHANGELOG.md - release history and update instructions.
- docs/COMPATIBILITY.md - passive mode and site compatibility limits.
- docs/ARCHITECTURE.md — the runtime contract: state model, attribution rules, messages, persistence.
- PRODUCT.md — audience, purpose and the principles the interface is held to.
- docs/TECHNICAL_AUDIT.md — the current audit and the platform limits behind the decisions (in Russian).
- THIRD_PARTY_NOTICES.md — the bundled Public Suffix List and its licence.



