Skip to content

About

Chrome extension to monitor website domains, IP addresses, WebSockets and fingerprinting.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

English · Русский

DomainScan

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.

CI status Latest release Chrome 114 or newer MIT license

DomainScan side panel for news.example: a note about possible fingerprinting marked as a heuristic, a search field, three display modes, and a list of destinations with first-party and third-party labels, request kinds, an expanded list of resolved IP addresses, an http marker and a via service worker marker.

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.

What it records

  • 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 http and ws are 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.

Install

Note

DomainScan is not in the Chrome Web Store yet, so it is installed unpacked.

  1. Download domainscan-vX.Y.Z.zip from Releases and unpack it, or clone this repository.
  2. Open chrome://extensions and turn on Developer mode.
  3. Choose Load unpacked and select the unpacked folder.
  4. Click the DomainScan toolbar icon to open the side panel.

Chrome 114 or newer is required.

Using it

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
Subdomains display mode: img.news.example is shown as news.example with the note from img.news.example under it. Domains display mode: hosts of one registrable domain are merged into a single row, news.example showing Document, Image and a times two counter.

Copy actions are separate and say what they copy: all visible domains, all visible IP addresses, or the rows you ticked.

The settings menu of the panel with four actions: pause capture, stop watching browser API use, stop watching on this site, and clear this tab.

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.

Privacy and permissions

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.

Limits worth knowing

  • 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.

Development

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 Chromium

The 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.

Documentation

License

MIT

About

Chrome extension to monitor website domains, IP addresses, WebSockets and fingerprinting.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages