Updated Jul 15, 2026

Recon

Grab full HTTP banners after a port scan

zgrab2 HTTP module for structured banner grabs.

Agent

overview

What zgrab2-http does

Feed open web ports from zmap or naabu into zgrab2-http when you need full response JSON rather than a crawler pass.

Shape each grab with --port, --method, --endpoint, --senders, --use-https, and --max-size, then read status, headers, and body as JSON.

Pick zgrab2-http-simple for title, status, and length only. Prefer httpx when you want tech detection on a URL list.

source github.com/zmap/zgrab2

use cases

Where zgrab2-http fits

Grab HTTP banners at scale

Send a request to every host in a list and capture the status, headers, and body as JSON, building a structured inventory of what each web service returns.

Fingerprint services after a port scan

Feed open web ports from a scanner into zgrab2-http so each one gets a full grab, turning open ports into identified HTTP services.

Inspect the TLS handshake

Use the HTTPS and TLS options to record certificate data, cipher suites, and handshake details alongside the HTTP response in one pass.

Probe specific endpoints

Set the method, endpoint, and custom headers to request a particular path or API route across the whole host list instead of just the root.

reference

zgrab2-http inputs and flags

53 inputs
NameTypeFlagDescription
sctBOOLEAN--sctRequest Signed Certificate Timestamps during TLS Handshake
portSTRING--portSpecify port to grab on (default: 80)
timeSTRING--timeExplicit request time to use, instead of clock. YYYYMMDDhhmmss format.
debugBOOLEAN--debugInclude debug fields in the output.
flushBOOLEAN--flushFlush after each line of output.
methodSTRING--methodSet HTTP request method type (default: GET)
no-sniBOOLEAN--no-sniDo not send domain name in TLS Handshake regardless of whether known

Showing key inputs. zgrab2-http exposes 53 inputs in total.

Full flag reference (53 inputs)
NameTypeFlagDescription
sctBOOLEAN--sctRequest Signed Certificate Timestamps during TLS Handshake
portSTRING--portSpecify port to grab on (default: 80)
timeSTRING--timeExplicit request time to use, instead of clock. YYYYMMDDhhmmss format.
debugBOOLEAN--debugInclude debug fields in the output.
flushBOOLEAN--flushFlush after each line of output.
inputSTRING·Input target
methodSTRING--methodSet HTTP request method type (default: GET)
no-sniBOOLEAN--no-sniDo not send domain name in TLS Handshake regardless of whether known
sendersSTRING--sendersNumber of send goroutines to use (default: 1000)
timeoutSTRING--timeoutSet connection timeout (0 = no timeout) (default: 10s)
triggerSTRING--triggerInvoke only on targets with specified tag
endpointSTRING--endpointSend an HTTP request to an endpoint (default: /)
max-sizeSTRING--max-sizeMax kilobytes to read in response to an HTTP request (default: 256)
maxbytesSTRING--maxbytesMaximum byte read limit per scan (0 = defaults)
no-ecdheBOOLEAN--no-ecdheDo not allow ECDHE handshakes
root-casFILE--root-casSet of certificates to use when verifying server certificates
use-httpsBOOLEAN--use-httpsPerform an HTTPS connection on the initial host
gomaxprocsSTRING--gomaxprocsSet GOMAXPROCS (default: 0)
heartbleedBOOLEAN--heartbleedCheck if server is vulnerable to Heartbleed
input-fileFILE·Input file
prometheusSTRING--prometheusAddress to use for Prometheus server (e.g. localhost:8080). If empty, Prometheus is disabled
user-agentSTRING--user-agentSet a custom user agent (default: Mozilla/5.0 zgrab/0.x)
dsa-enabledBOOLEAN--dsa-enabledAccept server DSA keys
max-versionSTRING--max-versionThe maximum SSL/TLS version that is acceptable. 0 means use the highest supported value.
min-versionSTRING--min-versionThe minimum SSL/TLS version that is acceptable. 0 means that SSLv3 is the minimum.
next-protosFILE--next-protosA list of supported application-level protocols
retry-httpsBOOLEAN--retry-httpsIf the initial request fails, reconnect and try with HTTPS.
server-nameSTRING--server-nameServer name used for certificate verification and (optionally) SNI
certificatesFILE--certificatesSet of certificates to present to the server
cipher-suiteSTRING--cipher-suiteA comma-delimited list of hex cipher suites to advertise.
client-helloSTRING--client-helloSet an explicit ClientHello (base64 encoded)
client-randomSTRING--client-randomSet an explicit Client Random (base64 encoded)
max-redirectsSTRING--max-redirectsMax number of redirects to follow (default: 0)
session-ticketBOOLEAN--session-ticketSend support for TLS Session Tickets and output ticket if presented
with-body-sizeBOOLEAN--with-body-sizeEnable the body_size attribute, for how many bytes actually read
certificate-mapFILE--certificate-mapA file mapping server names to certificates
extended-randomBOOLEAN--extended-randomSend TLS Extended Random Extension
keep-client-logsBOOLEAN--keep-client-logsInclude the client-side logs in the TLS handshake
curve-preferencesSTRING--curve-preferencesA list of elliptic curves used in an ECDHE handshake, in order of preference.
heartbeat-enabledBOOLEAN--heartbeat-enabledIf set, include the heartbeat extension
override-sig-hashBOOLEAN--override-sig-hashOverride the default SignatureAndHashes TLS option with more expansive default
redirects-succeedBOOLEAN--redirects-succeedRedirects are always a success, even if max-redirects is exceeded
fail-http-to-httpsBOOLEAN--fail-http-to-httpsTrigger retry-https logic on known HTTP/400 protocol mismatch responses
read-limit-per-hostSTRING--read-limit-per-hostMaximum total kilobytes to read for a single host (default 96kb) (default: 96)
connections-per-hostSTRING--connections-per-hostNumber of times to connect to each host (results in more output) (default: 1)
custom-headers-namesFILE--custom-headers-namesCSV of custom HTTP headers to send to server
signature-algorithmsSTRING--signature-algorithmsSignature and hash algorithms that are acceptable
custom-headers-valuesFILE--custom-headers-valuesCSV of custom HTTP header values to send to server. Should match order of custom-headers-names
extended-master-secretBOOLEAN--extended-master-secretOffer RFC 7627 Extended Master Secret extension
custom-headers-delimiterSTRING--custom-headers-delimiterDelimiter for customer header name/value CSVs
verify-server-certificateBOOLEAN--verify-server-certificateail if the server certificate does not match the server-name, or does not chain to a trusted root.
follow-localhost-redirectsBOOLEAN--follow-localhost-redirectsFollow HTTP redirects to localhost
compute-decoded-body-hash-algorithmSTRING--compute-decoded-body-hash-algorithmChoose algorithm for BodyHash field (sha256 or sha1)

example

Run zgrab2-http

zgrab2-http · command
# zgrab2-http: HTTP GET banner grab on port 443echo 198.51.100.10 | zgrab2 http --port 443 --method GET --senders 50
sample output
{"ip":"198.51.100.10","data":{"http":{"status_code":200,"headers":{"server":"nginx"}}}}{"ip":"203.0.113.5","data":{"http":{"status_code":301,"headers":{"server":"cloudflare"}}}}{"ip":"192.0.2.8","data":{"http":{"status_code":200,"headers":{"server":"Apache"}}}}{"ip":"198.51.100.44","data":{"http":{"status_code":403,"headers":{"server":"nginx"}}}}

guidance

Choosing zgrab2-http

Use after a port scan finds open web ports and you need full HTTP response JSON across the host list. Use zgrab2-http-simple for a compact summary. Use httpx for URL-list probing with tech detection.

zgrab2-http-simple

Same grab, parsed to title, status, and content length. Prefer it for triage summaries.

httpx

HTTP prober with tech detection and JSONL. Prefer it for URL-list recon.

zgrab2-tls

TLS handshake and certificate only. Prefer it when HTTP content is out of scope.

faq

zgrab2-http questions

The HTTP response as structured JSON: status, headers, body, redirect chain, and TLS handshake fields when --use-https is set.

Run zgrab2-http yourself

A CIDR range feeds zmap, which finds open web ports and passes them to zgrab2-http so each service's HTTP banner lands as a queryable output.

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