Skip to content

file area #13 · utilz · 1996 forever

H0N3YP0T-AUD1T0R █

Multi-protocol decoy fingerprinter / lab util · Python 3.10+ · MIT · “dialing in…”

.______________________________________________________________________________.
|  :: RELEASE ........ v1.0.4                                                  |
|  :: TYPE ........... Multi-Protocol Decoy Fingerprinter                      |
|  :: DISKS .......... 0 · pure electrons · no floppies harmed                 |
|  :: PROTECTION ..... NONE · MIT · spread the sauce                           |
|  :: PYPI ........... pypi.org/project/honeypot-auditor                       |
|  :: REPO ........... github.com/mziqudhd92/honeypot-auditor                  |
|------------------------------------------------------------------------------|
|  "warez? nah. headers. we trade banners, not bins."                          |
|  "if it answers any password, it ain't production — it's a lure."            |
|  "respect the sysop. probe only what you own. leave no STOR behind."         |
'------------------------------------------------------------------------------'

-=[ 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 <<<
Animated terminal demo (honeypot-auditor v1.0.4): Thales dd-honeypot / DataTrap with SSH, Telnet, MySQL, Redis, and PostgreSQL — basic -v then --deep, Honeyscore 100%
“five DataTrap faces on loopback: map the ports, run -v, then --deep. Honeyscore 100%.” — dd-honeypot lab · v1.0.4 · authorized only · beginner tutorial

-=[ 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
InstallUnlocks
pip install honeypot-auditorCore 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
FlagDescription
-h, --help, /help, /?Rich-styled options + figlet H-AUDITOR header
--versionPrint version and exit
--targetIP, hostname, or IPv4 CIDR (max /24, 254 hosts)
--confirm-authorizedRequired when any scanned IP is public (host or subnet)
--presetboth (default: IANA + lab), iana, or docker-research
-p, --portOnly these TCP ports (nmap-style; repeatable or 22,2222). Omit for full preset
--portsPer-protocol override (ssh=2222,ftp=9); map unused faces to =9 to skip
-v, --verboseScore/scoped formulas, hits & intra-category, fidelity, matrix, indicators
--deepShell semantics, OS coherence, HASSH/TCP stack, FSM fuzz, co-tenancy, temporal (incl. concurrent-load latency)/egress
--safe-modeHandshake-only; disables deep shell/path probes
--profileaudit (default), blend (browser mimesis), safe
--proxySOCKS5 egress (socks5h:// remote DNS preferred)
--passive-firstPassive intelligence before active probes; skip active when its score is high
--osint-onlyPassive intelligence only — no TCP probes
--passive-first-confirmAfter high passive / osint-only, run safe-mode active verify
--dual-stackResolve A+AAAA and compare IPv4 vs IPv6 results
--jitterFraction of timeout as max random delay (e.g. 0.3)
--jitter-msRandom delay range before probes (e.g. 50-500)
--max-concurrentGlobal socket concurrency budget (default 32)
--seedRNG seed for blend profile TLS/UA rotation
--preset deception-auditBlue-team QA preset (both ports + deep)
--format sarifExport SARIF 2.1.0 for DevSecOps pipelines
check-sigValidate declarative signature pack offline
-n, --with-nmapRun Nmap -sV / NSE phase (slow; off by default)
--shodan-keyEnable Shodan OSINT (or set SHODAN_API_KEY); opt-in — not queried otherwise; skipped on subnet scans
--intel-providerExplicitly select a named passive-intel plugin; repeatable
--intel-keyProvider key as NAME=KEY; prefer the provider environment variable
--scan-concurrencyParallel hosts for CIDR scans (default 8)
--timeoutSocket timeout in seconds (default 3)
--outputVersioned 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:

CategoryWeight
Passive intel25%
Arbitrary auth30%
State non-persistence25%
Static signature20%
Co-tenancy15%
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 categoryWeight
Shell execution semantics18%
Cross-artifact OS coherence15%
HASSH / TCP stack fingerprint12%
Protocol FSM conformance12%
Temporal / latency behavior10%

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
ProtocolTransportDefault ports (iana · lab)StrategiesIndicators
SSHTCP22 · 2222310
TelnetTCP23 · 232339
FTPTCP21 · 212138
SMTPTCP25 · 252537
POP3TCP110 · 111039
IMAPTCP143 · 114336
HTTPTCP80 / 443 · 8081312
HTTP proxyTCP3128 · 808034
SMBTCP445 · 144537
RedisTCP6379 · 6379318
MQTTTCP1883 · 11883310
MySQLTCP3306 · 330627
PostgresTCP5432 · 543222
MSSQLTCP1433 · 143326
MongoDBTCP27017 · 2701725
VNCTCP5900 · 500023
RDPTCP3389 · 338922
GitTCP9418 · 941833
ElasticsearchTCP9200 · 19200312
DockerTCP2375 · 12375310
KubernetesTCP6443 · 16443310
IPP / CUPSTCP631 · 1631315
MemcachedTCP11211 · 21211313
SIPUDP→TCP5060 · 506035
PPTPTCP1723 · 1172335
SNMPUDP161 · 1161210
DNSUDP53 · 15353312
NTPUDP123 · 1123311
TFTPUDP69 · 1069212
SSDPUDP1900 · 11900113
DHCPUDP67 · 106723
NetBIOSUDP+TCP137,139 · 113935
SyslogUDP+TCP514 · 1051412
Modbus TCPTCP502 · 150225

-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:

# 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.”