AI-Created Software

Last Updated: October 16, 2026

The following is AI-generated (aka vibe-coded) software. The software is specific to my needs and my system and may not work for you or your system. Support is limited, but if you report a bug I'll certainly look into it. All code is provided in a zip file for you to review should you choose.

External Site Logger

A Chrome extension that shows every top-level domain, subdomain, and IP address contacted while loading and using the current page — displayed in a toggleable sidebar (Chrome’s native side panel), with one-click copy buttons.

Install (unpacked, for local use)

  1. Unzip this folder somewhere permanent (don’t delete it after installing — Chrome loads the extension directly from these files).
  2. Open chrome://extensions in Chrome.
  3. Turn on Developer mode (top-right toggle).
  4. Click Load unpacked and select the domain-ip-inspector folder.
  5. Pin the extension (puzzle-piece icon in the toolbar → pin “Domain & IP Inspector”).

Use

  • Click the toolbar icon to open the sidebar. Click it again (or use Chrome’s side panel close control) to close it.
  • Browse normally — the three lists (Top-Level Domains, Subdomains, IP Addresses) update live as the page and its scripts/images/XHRs load.
  • Switching tabs updates the sidebar to that tab’s data automatically.
  • Navigating to a new page (full page load) resets the lists for that tab.
  • Buttons:
    • Copy next to each section header copies just that section.
    • Copy All Contents copies everything, grouped and labeled.
    • Clear wipes the current tab’s collected data without navigating.

How it works

  • background.js (a Manifest V3 service worker) listens to chrome.webRequest events for every request the browser makes on behalf of a tab (main page, subframes, scripts, images, XHR/fetch, etc.), extracts the hostname, and classifies it as either an IP literal or a domain.
  • Domains are split into a top-level/registrable domain (e.g. example.com) and, when present, the full subdomain hostname (e.g. api.example.com). A small list of common multi-part suffixes (co.uk, com.au, etc.) is included so those aren’t split incorrectly — this isn’t a full public suffix list, so a handful of obscure ccTLDs may be classified slightly off, but coverage is good for everyday browsing.
  • When Chrome reports the resolved server IP for a completed response (details.ip on webRequest.onResponseStarted), that’s added to the IP list too — so you see both IP literals used directly in URLs and the actual resolved IPs behind normal domain names.
  • Requests a page’s service worker makes aren’t tied to a tab by Chrome. They’re credited to every open tab showing a page (or frame) from the worker’s origin, so a site can’t hide traffic by routing it through its worker.
  • Requests the previous page sends while you’re leaving it (analytics beacons, pagehide fetches) are listed in their own Sent While Leaving the Previous Page section, which appears only when there’s something in it, instead of being mixed into the new page’s lists. A navigation within the same site can’t be told apart this way, so those still land in the main lists.
  • Each list holds up to 2,000 entries, so a page requesting endless random subdomains can’t use up memory. Past that, a “+N more not listed” line counts the requests to hosts that weren’t added.
  • Only the extension’s own side panel can ask the background for data or clear it.
  • Data is kept per-tab in memory only (nothing is written to disk or sent anywhere) and is cleared automatically on each new page load.

Notes / limitations

  • Because Manifest V3 no longer allows blocking webRequest listeners for most extensions, this extension is observational only — it reports traffic, it doesn’t block or modify it.
  • Resolved IPs aren’t available for every request (e.g. some cached responses don’t include one) — in those cases you’ll still see the domain, just not a paired IP.
  • Requests made from contexts Chrome doesn’t associate with a tab and that can’t be matched to an open page by origin (for example, the browser’s own background traffic) are not counted.
(1 votes, average: 5.00 out of 5)

Leave a Reply

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail.