Updated Jul 14, 2026

Discovery

Screenshot live web targets with headless Chrome

Headless Chrome screenshots for web target triage.

Agent

overview

What gowitness does

gowitness drives headless Chrome against every target in a file and writes a screenshot of what loads. Use the gallery to spot login portals, vendor defaults, and forgotten admin apps.

Tune --threads for Chrome workers, --port for nonstandard services, and --screenshot-path for storage. Persist with --write-db, --write-jsonl, or --write-csv; shape renders with --screenshot-fullpage and --chrome-proxy.

Trickest provides gowitness as a managed Discovery node. File of targets in, folder of captures out. Chain after httpx so only live hosts are shot. Prefer aquatone when you want a bundled HTML report.

source github.com/sensepost/gowitness

use cases

Where gowitness fits

Eyeball a large attack surface

Screenshot thousands of hosts so an analyst can scan the gallery for login pages, default panels, and oddities far faster than reading raw probe output.

Find forgotten admin and default apps

Capture every live interface to surface staging dashboards, vendor default pages, and exposed consoles that text-only probing hides.

Screenshot across many ports

Probe a port list per target so web apps on non-standard ports get captured alongside the usual 80 and 443.

Store results for later review

Write to a SQLite or Postgres database, CSV, or JSON lines so the screenshot run becomes a queryable record the team can revisit.

reference

gowitness inputs and flags

37 inputs
NameTypeFlagDescription
fileFILE--fileA file of targets to screenshot.
portSTRING--portPorts on targets to scan (default 80, 443; repeatable).
screenshot-pathSTRING--screenshot-pathFolder to store screenshots in (default ./screenshots).
threadsSTRING--threadsConcurrent Chrome workers to run (default 6).
screenshot-fullpageBOOLEAN--screenshot-fullpageCapture the full page rather than just the viewport.
write-dbBOOLEAN--write-dbWrite results to a SQLite database.
write-jsonlBOOLEAN--write-jsonlWrite results as JSON lines.
chrome-proxySTRING--chrome-proxyRoute requests through an HTTP or SOCKS5 proxy.

Showing key inputs. gowitness exposes 37 inputs in total.

Full flag reference (37 inputs)
NameTypeFlagDescription
fileFILE--fileA file with targets to scan
portSTRING--portPorts on targets to scan. Supports multiple --port flags (default [80,443])
delaySTRING--delayNumber of seconds delay between navigation and screenshotting (default 3)
quietBOOLEAN--quietSilence (almost all) logging
driverSTRING--driverThe scan driver to use. Can be one of [gorod, chromedp] (default "chromedp")
no-httpBOOLEAN--no-httpDo not add 'http://' to targets where missing
threadsSTRING--threadsNumber of concurrent threads (goroutines) to use (default 6)
timeoutSTRING--timeoutNumber of seconds before considering a page timed out (default 60)
no-httpsBOOLEAN--no-httpsDo not add 'https://' to targets where missing
write-dbBOOLEAN--write-dbWrite results to a SQLite database
debug-logBOOLEAN--debug-logEnable debug logging
skip-htmlBOOLEAN--skip-htmlDon't include the first request's HTML response when writing results
write-csvBOOLEAN--write-csvWrite results as CSV (has limited columns)
javascriptSTRING--javascriptA JavaScript function to evaluate on every page, before a screenshot. Note: It must be a JavaScript function! e.g., () => console.log('gowitness');
uri-filterSTRING--uri-filterValid URIs to pass to the scanning process (default [http,https])
write-noneBOOLEAN--write-noneUse an empty writer to silence warnings
ports-largeBOOLEAN--ports-largeInclude a large ports list when scanning targets
ports-smallBOOLEAN--ports-smallInclude a small ports list when scanning targets
write-jsonlBOOLEAN--write-jsonlWrite results as JSON lines
chrome-proxySTRING--chrome-proxyAn HTTP/SOCKS5 proxy server to use. Specify the proxy using this format: proto://address:port
ports-mediumBOOLEAN--ports-mediumInclude a medium ports list when scanning targets
save-contentBOOLEAN--save-contentSave content from network requests to the configured writers. WARNING: This flag has the potential to make your storage explode in size
write-db-uriSTRING--write-db-uriThe database URI to use. Supports SQLite, Postgres, and MySQL (e.g., postgres://user:pass@host:port/db) (default "sqlite://gowitness.sqlite3")
write-stdoutBOOLEAN--write-stdoutWrite successful results to stdout (usefull in a shell pipeline)
chrome-headerSTRING--chrome-headerExtra headers to add to requests. Supports multiple --header flags
chrome-wss-urlSTRING--chrome-wss-urlA websocket URL to connect to a remote, already running Chrome DevTools instance (i.e., Chrome started with --remote-debugging-port)
chrome-window-xSTRING--chrome-window-xThe Chrome browser window width, in pixels (default 1920)
chrome-window-ySTRING--chrome-window-yThe Chrome browser window height, in pixels (default 1080)
javascript-fileFILE--javascript-fileA file containing a JavaScript function to evaluate on every page, before a screenshot. See --javascript
log-scan-errorsBOOLEAN--log-scan-errorsLog scan errors (timeouts, DNS errors, etc.) to stderr (warning: can be verbose!)
screenshot-pathSTRING--screenshot-pathPath to store screenshots (default "./screenshots")
chrome-user-agentSTRING--chrome-user-agentThe user-agent string to use (default "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36")
screenshot-formatSTRING--screenshot-formatFormat to save screenshots as. Valid formats are: jpeg, png (default "jpeg")
write-screenshotsBOOLEAN--write-screenshotsStore screenshots with writers in addition to filesystem storage
screenshot-fullpageBOOLEAN--screenshot-fullpageDo full-page screenshots, instead of just the viewport
screenshot-skip-saveBOOLEAN--screenshot-skip-saveDo not save screenshots to the screenshot-path (useful together with --write-screenshots)
write-db-enable-debugBOOLEAN--write-db-enable-debugEnable database query debug logging (warning: verbose!)

example

Run gowitness

gowitness · command
# screenshot every URL in a file, full page, 10 workers, into a foldergowitness scan file -f urls.txt --screenshot-path ./screenshots --screenshot-fullpage --threads 10
sample output
INF starting scan threads=6 timeout=60INF result url=https://example.com status-code=200 title="Example Domain"INF result url=https://www.example.com status-code=200 title="Example Domain"INF result url=https://app.example.com status-code=302 title=""INF result url=https://admin.example.com status-code=401 title="Sign in"INF result url=https://dev.example.com status-code=200 title="Staging Environment"INF result url=https://api.example.com status-code=404 title="404 Not Found"INF scan complete results=6 screenshots=./screenshots

guidance

Choosing gowitness

Use gowitness to visually triage a live web surface after discovery and HTTP probing. It screenshots; it does not crawl or scan for vulns. For results into SQLite from the start, use gowitness-db; to feed nmap XML, use gowitness-nmap.

gowitness-db

gowitness variant that outputs a SQLite database when you want a queryable store from the start.

aquatone

Screenshots hosts and builds an HTML report gallery. gowitness leans on headless Chrome with richer storage writers.

gowitness-nmap

Feeds gowitness an nmap XML file so it screenshots discovered web services directly.

faq

gowitness questions

Default is ./screenshots. Point --screenshot-path at another directory. On Trickest the whole folder is the node output.

Run gowitness yourself

A host list is probed by httpx, then gowitness screenshots the live interfaces and writes the captures as a queryable output.

Facts on this page come from the live Trickest tool library.