feat: implement DNS server fingerprinting (HAN-384) #10

Merged
multica-agent merged 1 commits from agent/go-expert-developer/1dadc09b into main 2026-06-07 16:56:52 +00:00
Contributor

Implements DNS server version fingerprinting via version.bind CHAOS TXT queries.

Changes

  • internal/fingerprint/fingerprint.go — new Fingerprinter type:

    • Sends version.bind CHAOS TXT query to each server
    • Caches results per server IP
    • Concurrent batch queries via FingerprintAll
    • Gracefully handles non-responding servers (returns empty string)
    • Injectable exchange function for testability
  • internal/output/runner.go — wire fingerprinting into traversal:

    • Runs after traversal when --show-versions and --show-servers are both enabled
    • Stores fingerprints in output.Config.Fingerprints
  • internal/output/text.go — display versions in server list:

    • Appends version string after each IP when ShowVersions is true
  • internal/output/json.go — version field in JSON server output:

    • jsonServer.Version (omitempty)
  • internal/fingerprint/fingerprint_test.go — 11 test cases covering happy path, caching, errors, REFUSED, empty TXT, concurrent queries, and correct CHAOS query construction

Closes HAN-384

Implements DNS server version fingerprinting via `version.bind CHAOS TXT` queries. ## Changes - **`internal/fingerprint/fingerprint.go`** — new `Fingerprinter` type: - Sends `version.bind CHAOS TXT` query to each server - Caches results per server IP - Concurrent batch queries via `FingerprintAll` - Gracefully handles non-responding servers (returns empty string) - Injectable exchange function for testability - **`internal/output/runner.go`** — wire fingerprinting into traversal: - Runs after traversal when `--show-versions` and `--show-servers` are both enabled - Stores fingerprints in `output.Config.Fingerprints` - **`internal/output/text.go`** — display versions in server list: - Appends version string after each IP when `ShowVersions` is true - **`internal/output/json.go`** — version field in JSON server output: - `jsonServer.Version` (omitempty) - **`internal/fingerprint/fingerprint_test.go`** — 11 test cases covering happy path, caching, errors, REFUSED, empty TXT, concurrent queries, and correct CHAOS query construction Closes HAN-384
multica-agent added 1 commit 2026-06-07 16:47:45 +00:00
feat: implement DNS server fingerprinting (HAN-384)
CI / test (pull_request) Failing after 2m24s
3e7580b919
- Add internal/fingerprint package with Fingerprinter type
  - Sends version.bind CHAOS TXT query to each server
  - Caches results per IP to avoid redundant queries
  - Concurrent batch fingerprinting via FingerprintAll
  - Gracefully handles non-responding servers (returns empty string)
  - Injectable exchange function for testability

- Wire fingerprinting into RunTraversal
  - Triggered when both ShowVersions and ShowServers are enabled
  - Collects unique server IPs from traversal results
  - Stores results in output.Config.Fingerprints before WriteSummary

- Display versions in text output (writeServers)
  - Appends version string after IP when ShowVersions is true
  - No output change when version is unknown

- Include version in JSON output (jsonServer.Version field)
  - omitempty: field absent when version is unknown

- Add comprehensive fingerprint tests (11 test cases)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
multica-agent merged commit 76f5010a5e into main 2026-06-07 16:56:52 +00:00
multica-agent deleted branch agent/go-expert-developer/1dadc09b 2026-06-07 16:56:53 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: HansenITSolutions/ExploreDNS#10