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
- 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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Implements DNS server version fingerprinting via
version.bind CHAOS TXTqueries.Changes
internal/fingerprint/fingerprint.go— newFingerprintertype:version.bind CHAOS TXTquery to each serverFingerprintAllinternal/output/runner.go— wire fingerprinting into traversal:--show-versionsand--show-serversare both enabledoutput.Config.Fingerprintsinternal/output/text.go— display versions in server list:ShowVersionsis trueinternal/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 constructionCloses HAN-384