crockTail is a passive OSINT (Open Source Intelligence) reconnaissance tool. Given a target domain, it aggregates publicly available information — DNS records, IP/ASN ownership, SSL/TLS certificate details, and domain registration data — into a single consolidated report.
This project is built as a personal learning project during a software development internship, combining an interest in cybersecurity/red-teaming with hands-on full-stack development practice.
What it does
Enter a domain, hit scan, get a single report combining five modules:
| Module | Source | What you get |
|---|---|---|
| DNS | Public resolvers (dnsjava) | A, AAAA, MX, NS, TXT records |
| IP Info | ip-api.com | Geolocation, ISP, ASN ownership |
| SSL/TLS | Direct TLS handshake (443) | Issuer, validity window, days until expiry, all SAN domains — often reveals related subdomains |
| WHOIS / RDAP | rdap.org | Registrar, registration/expiry dates, nameservers |
| Certificate Transparency | crt.sh | Historical certificates for the domain, and every subdomain ever listed on one — passive subdomain discovery |
All five run per query and get aggregated into one JSON response via a single /scan call. Every result also carries a source field so you know exactly which upstream data source it came from.
Risk observations
On top of raw data, crockTail runs a lightweight assessment pass and surfaces plain-language observations, each tagged as a warning or info:
- ⚠ Certificate expires soon (≤15 days) or has already expired
- ⚠ Domain was registered recently (<30 days ago)
- ℹ Unusually high certificate reissuance history
- ℹ Historical subdomains discovered via certificate transparency logs
This turns the tool from a raw data dump into something that tells you what's actually worth a second look, instead of making you eyeball four different reports yourself.
Reliability
Every external call (IP lookup, SSL handshake, WHOIS, crt.sh) is wrapped in an automatic retry (3 attempts, 800ms backoff) to absorb transient network failures — common with third-party APIs and raw TLS connections — instead of failing a whole scan on the first hiccup.
Cross-verification & confidence scoring
crockTail doesn't just report data — it checks itself:
- Multi-resolver DNS cross-verification — every domain's A record is independently queried against Google (8.8.8.8) and Cloudflare (1.1.1.1). A mismatch is surfaced as a warning observation ("DNS resolvers disagree"), a signal that can indicate DNS tampering or interception.
- Confidence score — each scan gets a 0–100 confidence score (high/medium/low) based on which modules succeeded, whether any retries were needed, and whether the DNS cross-check agreed. Hover the score in the UI to see exactly what it's based on.
This is the difference between a data aggregator and an analysis tool: the goal isn't just to show you results, it's to tell you how much to trust them.
Other features
- Batch queries — scan multiple domains in one request (
POST /scan/batch), results returned as a list - Query logging — save any scan result to
query_log.txton demand (one JSON entry per line). Works for single scans and for individual rows within a batch result
Scope & Ethics
crockTail is strictly passive. It only talks to public third-party data sources and performs a standard TLS handshake — the same thing a browser does when it loads a site over HTTPS.
It does not:
- Port scan
- Fingerprint services or versions
- Scan for vulnerabilities
- Actively probe target infrastructure beyond a normal TLS handshake
Built for authorized security research, education, and reconnaissance on domains you own or have explicit permission to assess. You're responsible for using it lawfully.
Tech stack
Backend — Java 17, Spring Boot, dnsjava (DNS resolution), Jackson (JSON), RestTemplate (HTTP client), Maven
Frontend — Vue 3 + Vite, single-page console-style UI with tabbed report view
Project structure
crocktail/
├── src/main/java/com/example/crocktail/
│ ├── CrocktailApplication.java
│ ├── controller/
│ │ └── ScanController.java # /scan, /scan/batch, /scan/log
│ ├── service/
│ │ ├── DnsLookupService.java
│ │ ├── IpInfoService.java
│ │ ├── SslCertService.java
│ │ ├── WhoisService.java
│ │ ├── CrtShService.java
│ │ ├── CrossVerificationService.java
│ │ ├── RiskAssessmentService.java # observations + confidence scoring
│ │ ├── BatchScanService.java
│ │ ├── QueryLogService.java
│ │ ├── RetryHelper.java # shared retry/backoff logic
│ │ └── UrlNormalizer.java
│ └── model/
│ ├── DnsReport.java
│ ├── IpInfoResult.java
│ ├── SslCertResult.java
│ ├── WhoisResult.java
│ ├── CrtShResult.java
│ ├── CrossVerificationResult.java
│ ├── ConfidenceResult.java
│ ├── Observation.java
│ ├── BatchScanRequest.java
│ ├── BatchScanResult.java
│ └── ScanResult.java # aggregated response shape
└── frontend/ # Vue 3 UI
Getting started
Requirements: Java 17+, Node.js, Maven (bundled via .mvn wrapper)
Run the backend
./mvnw spring-boot:run
Starts on http://localhost:8080.
Run the frontend
cd frontend
npm install
npm run dev
Or query the API directly
| Endpoint | Method | Body | Description |
|---|---|---|---|
/scan?domain=example.com |
GET | — | Scan a single domain |
/scan/batch |
POST | { "domains": ["a.com", "b.com"] } |
Scan multiple domains, returns a list of results |
/scan/log |
POST | A ScanResult object |
Append that result as one JSON line to query_log.txt |
Roadmap
- Batch queries
- Per-result source attribution
- Query logging
- Certificate transparency lookup (crt.sh) for passive subdomain discovery
- Retry/backoff for transient network failures
- Risk observation flags (cert expiry, domain age, reissuance volume)
- Multi-resolver DNS cross-verification (Google vs Cloudflare)
- Confidence scoring per scan
Historical change tracking and report export were considered and deliberately deferred — they need a meaningful backlog of log data to be worth building, which the project doesn't have yet.
Disclaimer
For educational and authorized security research purposes only. The author assumes no liability for misuse. Always confirm you have permission to assess a target before running reconnaissance against it.
Comments