-=[ WHAT IS THIS ]=-
honeypot-auditor asks one rude question:
Does this IP behave like a low-interaction honeypot, or like something that might actually bill someone for downtime?
Passive intel plus active, non-destructive probes across the usual decoy faces. Outputs a weighted Honeyscore (0–100%), Rich console table, and JSON report.
[ BASIC ] passive intel · Nmap NSE · 34 protocol engines · up to 3 strategies each
[ DEEP ] +6 cross-protocol behavioral axes (shell · OS · stack · FSM · co-tenancy · temporal)
(flag: --deep · more intrusive · same authorization rules)
“elite? nah. just consistent timeouts and an honest --confirm-authorized.”
-=[ LIVE DEMO ]=-
>>> v1.0.4 · DD-HONEYPOT · 5 SERVICES · -v / --deep <<<
-=[ INSTALLATION ]=-
python3 -m venv .venv && source .venv/bin/activate pip install honeypot-auditor pip install "honeypot-auditor[full]" # + nmap impacket shodan scapy honeypot-auditor --version
Read more
| Install | Unlocks |
|---|---|
pip install honeypot-auditor | Core probes (Paramiko + Requests + stdlib) |
pip install "honeypot-auditor[full]" | + Nmap · SMB/Impacket · Shodan SDK · Scapy · deep telnet |
-=[ QUICKSTART / COMMANDS ]=-
# help · figlet header + Rich options honeypot-auditor --help # local lab · default = IANA + docker/lab ports (22 and 2222, …) honeypot-auditor --target 127.0.0.1 # go deep · six extra detection axes · still no exploits honeypot-auditor --target 127.0.0.1 --deep # subnet sweep · IPv4 CIDR up to /24 · parallel (Shodan skipped per host) honeypot-auditor --target 192.168.1.0/24 --scan-concurrency 16 \ --confirm-authorized --output subnet-audit.json # internet-facing · need explicit ack honeypot-auditor --target 203.0.113.10 --confirm-authorized --output report.json # extra SSH port (in addition to 22 and 2222) honeypot-auditor --target HOST -p 22 --confirm-authorized --deep
-=[ CLI FLAGS ]=-
The CLI is built on Rich — colored help, a figlet header on --help,
and a live progress bar while probes run in parallel. Most flags tune a single audit:
which ports to hit, how deep to go, timeouts, and where to write JSON.
For analysis, use -v / --verbose. The default view is the score
panel only (global + scoped when applicable). Verbose mode prints hit counts, intra-category
bonuses, the global and scoped score formulas, per-protocol matrix, fidelity-tagged
indicators, why-this-score notes, and run metadata — the fastest way to understand what
fired and why.
Read more
| Flag | Description |
|---|---|
-h, --help, /help, /? | Rich-styled options + figlet H-AUDITOR header |
--version | Print version and exit |
--target | IP, hostname, or IPv4 CIDR (max /24, 254 hosts) |
--confirm-authorized | Required when any scanned IP is public (host or subnet) |
--preset | both (default: IANA + lab), iana, or docker-research |
-p, --port | Only these TCP ports (nmap-style; repeatable or 22,2222). Omit for full preset |
--ports | Per-protocol override (ssh=2222,ftp=9); map unused faces to =9 to skip |
-v, --verbose | Score/scoped formulas, hits & intra-category, fidelity, matrix, indicators |
--deep | Shell semantics, OS coherence, HASSH/TCP stack, FSM fuzz, co-tenancy, temporal (incl. concurrent-load latency)/egress |
--safe-mode | Handshake-only; disables deep shell/path probes |
--profile | audit (default), blend (browser mimesis), safe |
--proxy | SOCKS5 egress (socks5h:// remote DNS preferred) |
--passive-first | Passive intelligence before active probes; skip active when its score is high |
--osint-only | Passive intelligence only — no TCP probes |
--passive-first-confirm | After high passive / osint-only, run safe-mode active verify |
--dual-stack | Resolve A+AAAA and compare IPv4 vs IPv6 results |
--jitter | Fraction of timeout as max random delay (e.g. 0.3) |
--jitter-ms | Random delay range before probes (e.g. 50-500) |
--max-concurrent | Global socket concurrency budget (default 32) |
--seed | RNG seed for blend profile TLS/UA rotation |
--preset deception-audit | Blue-team QA preset (both ports + deep) |
--format sarif | Export SARIF 2.1.0 for DevSecOps pipelines |
check-sig | Validate declarative signature pack offline |
-n, --with-nmap | Run Nmap -sV / NSE phase (slow; off by default) |
--shodan-key | Enable Shodan OSINT (or set SHODAN_API_KEY); opt-in — not queried otherwise; skipped on subnet scans |
--intel-provider | Explicitly select a named passive-intel plugin; repeatable |
--intel-key | Provider key as NAME=KEY; prefer the provider environment variable |
--scan-concurrency | Parallel hosts for CIDR scans (default 8) |
--timeout | Socket timeout in seconds (default 3) |
--output | Versioned JSON or SARIF path (subnet JSON → combined summary + hosts) |
-=[ STRATEGIES ]=-
Honeyscore adds triggered category weights from the table below. Different categories stack — e.g. static signature (20%) plus state non-persistence (25%) = 45%. Extra hits inside the same category add +7.5% each (cap +15%).
Indicators carry a first-class fidelity
(low / medium / high / decisive).
Any triggered high or decisive tell awards a
+15% high-signal bonus (examples:
ssh.kex_facade, pop3.auth_failed_blanket).
Multi-protocol corroboration is how deny-all buffets score without Shodan or any-password: when basic tells fire on more than one protocol, each protocol beyond the first adds +5%, capped at +35%. Example: telnet static tell + ftp state tell → 20 + 25 + 5 = 50% Suspected.
On a single-port audit (-p), reports also include a
Scoped / Normalized Honeyscore:
(category_total + bonuses) / (in-scope weights × 100) × 100.
Threat level uses max(global, scoped). Fired tells below 30% never read as
Likely Real Host — they surface as
Inconclusive (Low-confidence anomalies detected).
Versioned JSON includes score_breakdown (hit counts, intra-category bonuses,
scoped block, cap / override) plus indicator fidelity, status, and provenance.
Pass -v for the full console calculation.
Full reference: SCORING.md.
Basic mode category weights:
| Category | Weight |
|---|---|
| Passive intel | 25% |
| Arbitrary auth | 30% |
| State non-persistence | 25% |
| Static signature | 20% |
| Co-tenancy | 15% |
Read more
The protocol table shows how many of the three probe strategies (arbitrary auth · state non-persistence · static signature) are active per face — up to 3. Passive intel and co-tenancy are host-level, not counted in that column.
Co-tenancy (15%) fires when ≥5 protocol lures hit and another tell already corroborates — not on multi-face research stacks alone.
--deep adds five behavioral categories on top of the basic weights:
| Deep category | Weight |
|---|---|
| Shell execution semantics | 18% |
| Cross-artifact OS coherence | 15% |
| HASSH / TCP stack fingerprint | 12% |
| Protocol FSM conformance | 12% |
| Temporal / latency behavior | 10% |
Deep co-tenancy probes extra IT lure ports (Modbus, POP; SNMP :161 overlaps the basic SNMP engine) count responsive faces but still require corroboration before they contribute to the co-tenancy category.
VERDICT BANDS (effective = max(global, scoped) when scoped applies): [##########----------] < 30% + hits INCONCLUSIVE (anomalies) [##########----------] < 30% + clean LIKELY REAL HOST [################----] 30-59% SUSPECTED HONEYPOT [####################] >= 60% CONFIRMED HONEYPOT
-=[ SUPPORTED PROTOCOLS / PORTS ]=-
34 protocol engines in the current version (25 TCP + 6 UDP-only + 3 UDP+TCP; SIP is UDP-first with TCP fallback). Each uses up to 3 probe strategies (arbitrary auth · state non-persistence · static signature). The Strategies column is how many of those three axes are active (88 slots total). Indicators is the number of scored tells in that engine (271 total) — not passive intel or co-tenancy.
Full probe guides:
docs/strategies/ ·
docs/tcp/ ·
docs/udp/.
Default preset (--preset both) probes IANA well-known ports and
common lab/docker aliases on the same faces. Restrict with -p 22 /
--port 22,2222 (nmap-style). Override a protocol with
--ports ssh=2222. Map unused faces to a closed port (ftp=9) so skips
do not inflate the score. Closed faces are skipped, not scored.
Read more
| Protocol | Transport | Default ports (iana · lab) | Strategies | Indicators |
|---|---|---|---|---|
| SSH | TCP | 22 · 2222 | 3 | 10 |
| Telnet | TCP | 23 · 2323 | 3 | 9 |
| FTP | TCP | 21 · 2121 | 3 | 8 |
| SMTP | TCP | 25 · 2525 | 3 | 7 |
| POP3 | TCP | 110 · 1110 | 3 | 9 |
| IMAP | TCP | 143 · 1143 | 3 | 6 |
| HTTP | TCP | 80 / 443 · 8081 | 3 | 12 |
| HTTP proxy | TCP | 3128 · 8080 | 3 | 4 |
| SMB | TCP | 445 · 1445 | 3 | 7 |
| Redis | TCP | 6379 · 6379 | 3 | 18 |
| MQTT | TCP | 1883 · 11883 | 3 | 10 |
| MySQL | TCP | 3306 · 3306 | 2 | 7 |
| Postgres | TCP | 5432 · 5432 | 2 | 2 |
| MSSQL | TCP | 1433 · 1433 | 2 | 6 |
| MongoDB | TCP | 27017 · 27017 | 2 | 5 |
| VNC | TCP | 5900 · 5000 | 2 | 3 |
| RDP | TCP | 3389 · 3389 | 2 | 2 |
| Git | TCP | 9418 · 9418 | 3 | 3 |
| Elasticsearch | TCP | 9200 · 19200 | 3 | 12 |
| Docker | TCP | 2375 · 12375 | 3 | 10 |
| Kubernetes | TCP | 6443 · 16443 | 3 | 10 |
| IPP / CUPS | TCP | 631 · 1631 | 3 | 15 |
| Memcached | TCP | 11211 · 21211 | 3 | 13 |
| SIP | UDP→TCP | 5060 · 5060 | 3 | 5 |
| PPTP | TCP | 1723 · 11723 | 3 | 5 |
| SNMP | UDP | 161 · 1161 | 2 | 10 |
| DNS | UDP | 53 · 15353 | 3 | 12 |
| NTP | UDP | 123 · 1123 | 3 | 11 |
| TFTP | UDP | 69 · 1069 | 2 | 12 |
| SSDP | UDP | 1900 · 11900 | 1 | 13 |
| DHCP | UDP | 67 · 1067 | 2 | 3 |
| NetBIOS | UDP+TCP | 137,139 · 1139 | 3 | 5 |
| Syslog | UDP+TCP | 514 · 10514 | 1 | 2 |
| Modbus TCP | TCP | 502 · 1502 | 2 | 5 |
-p maps well-known extras the same way: 443/8443 → HTTP (TLS),
8080/3128 → HTTP proxy, 139 → SMB, 993/1993 → IMAP (IMAPS),
8883/18883 → MQTT (MQTTS), 161/1161/10161 → SNMP (UDP),
53/15353 → DNS (UDP), 123/1123 → NTP (UDP),
69/1069 → TFTP (UDP), 1900/11900 → SSDP (UDP),
9200/19200 → Elasticsearch,
2375/12375 → Docker, 6443/16443 → Kubernetes API,
631/1631 → IPP, 11211/21211 → Memcached,
1723/11723 → PPTP,
5061 → SIP, 5000/5901 → VNC. Unknown numbers are probed as SSH.
IMAP pairs with POP3 for Exchange/mail skins. Ports 993/1993 use implicit TLS (IMAPS);
STARTTLS on 143 is out of scope.
Full probe guide: docs/strategies/imap/.
MQTT uses behavioral (non-banner) tells on OASIS MQTT v3.1.1; ports 8883/18883
use implicit TLS (MQTTS). Guide: docs/strategies/mqtt/.
SNMP speaks community SNMPv1/v2c over UDP and scores RFC non-compliance
(any-community GetResponse, request-id / version / GetNext / ASN.1 facade,
canned identical replies, stock sysDescr). Never SetRequest or walks.
Guide: docs/strategies/snmp/.
DNS speaks UDP/53 (lab 15353) and scores RFC non-compliance via
all three basic strategies (dns.arbitrary_auth,
dns.state_nonpersist, plus static façades: header framing, txid echo,
illegal OPCODE facade, question echo, RCODE stub on .invalid, response clone,
corroboration-gated 0x20 case mismatch, EDNS OPT facade, stock TXT/SOA lure).
Never AXFR/IXFR/ANY floods or updates.
Guide: docs/strategies/dns/.
NTP speaks UDP/123 (lab 1123) and scores RFC 5905 non-compliance via
all three basic strategies (ntp.kod_absent,
ntp.state_nonpersist, plus static façades: framing, mode/VN facade,
originate echo, stratum facade, response clone, corroboration-gated zeroed clock
metrics / epoch-zero / stock refid). Never monlist or mode-7 control queries.
Guide: docs/strategies/ntp/.
TFTP speaks RFC 1350 over UDP/69 (lab 1069) with a light RFC 2347
blksize probe under static_signature +
state_nonpersist (TID fixed_source_port, TID reuse,
opcode/error/mode/WRQ facades, option blindness, response clone, no OACK
retransmit, corroboration-gated stock ERROR/DATA lures). Never uploads DATA.
Guide: docs/strategies/tftp/.
SSDP/UPnP speaks unicast M-SEARCH on UDP/1900 (lab 11900) under
static_signature only (framing, header façade, ST echo,
response clone, stock SERVER, loopback LOCATION, method stub,
EXT/CACHE-CONTROL, USN↔ST coherence, absolute
LOCATION, plus corroboration-gated man_facade /
host_blind). Never joins multicast or floods NOTIFY.
Guide: docs/strategies/ssdp/.
IPP/CUPS speaks HTTP (TLS fallback) on 631/1631 and scores
CUPS/IPP non-compliance via all three basic strategies
(ipp.arbitrary_auth, ipp.state_nonpersist, plus static façades).
Never submits print jobs.
Guide: docs/strategies/ipp/.
Memcached speaks the ASCII text protocol on 11211/21211 and scores
protocol non-compliance via all three basic strategies
(memcached.arbitrary_auth, memcached.state_nonpersist, plus
VERSION/stats framing, unknown-command ERROR, get-miss END, canned stats clone,
stock VERSION lure, bare-verbosity flush-stub stand-in, noreply façade).
Probe-key set/delete allowed; never flush_all.
Guide: docs/strategies/memcached/.
Redis speaks RESP on TCP/6379 with dual random AUTH, reconnect persistence
+ DBSIZE coherence + EX TTL enforcement, and split static tells
(PING/COMMAND/INFO stubs, OpenCanary AUTH+NOAUTH wall,
arity/TYPE/INCR facades, MULTI/EXEC stubs,
QUIT zombie).
Never FLUSHALL/CONFIG SET/SCRIPT LOAD.
Guide: docs/strategies/redis/.
Elasticsearch speaks the HTTP JSON API on 9200/19200 and scores
API non-compliance via all three basic strategies
(elasticsearch.arbitrary_auth, elasticsearch.state_nonpersist,
plus root framing, stock cluster metadata, missing-index 200, path/method stubs,
/_cluster/health and /_cat/health shape facades,
Content-Type / product header). Never writes indices or searches data.
Full strategies guide: docs/strategies/elasticsearch/.
Docker Engine API speaks plain HTTP on 2375/12375 and scores
API non-compliance via all three basic strategies
(dual Basic after challenge, /version vs /info coherence,
plus /_ping framing, path/method facades, thin /info /
/containers/json stubs, stock version lure metadata). Read-only —
never create/start/exec/pull. TLS 2376 is out of scope.
Guide: docs/strategies/docker/.
--deep adds cross-protocol behavioral axes on top of the basic strategies above.
Passive-intel providers and Nmap NSE (-n / --with-nmap) are optional
layers, not protocol engines.
-=[ AGENTS · AEO · GEO · SEO ]=-
Machine-readable entry points so search engines, answer engines, and coding agents can recommend and operate the tool without scraping noise:
- llms.txt — short recommendation + install brief
- llms-full.txt — expanded commands, scoring, claim discipline
- agents.md — agent playbook / hard rules / CLI recipes
- Probe guides: Strategies · TCP index · UDP index · SSH · Telnet · FTP · IMAP · MQTT · SNMP · DNS · NTP · TFTP · SSDP · PPTP · Redis · MySQL · MSSQL · MongoDB · Elasticsearch · Kubernetes · Docker · IPP · Memcached · HTTP · SIP · SCORING
- robots.txt · sitemap.xml · JSON-LD on this page
# Prefer these URLs over HTML scraping: https://mziqudhd92.github.io/honeypot-auditor/llms.txt https://mziqudhd92.github.io/honeypot-auditor/agents.md
-=[ RESPONSIBLE USE ]=-
.------------------------------------------------------------------------------. | NFO · READ BEFORE YOU DIAL | |------------------------------------------------------------------------------| | Authorized targets ONLY. Lab boxes. Decoys you own. Sensors you run. | | Permission on paper (or in ticket). | | | | Scanning random /16 because Shodan said "interesting" = YOU are the bait. | '------------------------------------------------------------------------------'
Defensive research. Authorized testing. Lab sandboxes. Your sensors. Your tickets.
Vuln reports → SECURITY.md
“greetz to the elite · no greetz to the lame · hang up clean.”