# checkmy
`checkmy` is a Rust CLI for network diagnostics.
It supports:
- Smart audits (`checkmy <target>`) for domains, IPs, and host:port targets
- IP geolocation lookup, DNS lookups, traceroute, certificate inspection, WHOIS, HTTP checks, TCP/TLS connect tests, and port scanning
- Human-readable text output by default, with stable JSON output via `--json`
## Install
### From source
```bash
git clone https://github.com/weareproxima/checkmy-cli.git
cd checkmy-cli
cargo build --release
```
Binary:
```bash
./target/release/checkmy
```
### Pre-built binaries
Download from GitHub Releases:
`https://github.com/weareproxima/checkmy-cli/releases`
## Quick Start
### Smart mode (default)
```bash
# Full audit: DNS, WHOIS, ports, TLS, HTTP
checkmy example.com
# Faster run (skip WHOIS)
checkmy example.com --quick
# Include traceroute after audit
checkmy example.com --deep
# JSON output
checkmy example.com --json
```
Smart mode behavior by target type:
| Domain | `checkmy cloudflare.com` | Full 5-phase audit |
| IP | `checkmy 1.1.1.1` | IP lookup (geolocation, ASN, reverse DNS) |
| Host:port | `checkmy cloudflare.com:443` | TCP/TLS connectivity test |
## Commands
| `checkmy <target>` | Smart diagnostics (auto-detect target type) |
| `checkmy dns <domain>` | DNS queries (`A`, `AAAA`, `MX`, `TXT`, `NS`, `ANY`) |
| `checkmy ip <address>` | IP geolocation, ASN, and reverse DNS lookup |
| `checkmy trace <target>` | Traceroute (`icmp`, `udp`, `tcp`) |
| `checkmy cert <host>` | TLS certificate inspection |
| `checkmy whois <target>` | WHOIS / RDAP lookup |
| `checkmy connect <host> <port>` | Raw TCP/TLS connectivity test |
| `checkmy http <url>` | HTTP healthcheck |
| `checkmy port <target>` | Port scanner |
For complete examples and options, see `USAGE.md`.
## Output Modes
### Human output (default)
Text output is optimized for readability:
- structured sections (`Request`, `Timing`, `Response`, `Summary`)
- compact time units (`ms`, `s`, `m`, `h`)
- compact size units (`B`, `KiB`, `MiB`, `GiB`)
- DNS TTL in compact `w d h m s` form (for example: `5m`, `12m2s`, `5h21m37s`)
### JSON output (`--json`)
Use JSON for scripts and integrations:
```bash
JSON field semantics are stable and do not depend on text layout changes.
## Example Output (Smart)
```text
SMART cloudflare.com
DNS OK 209ms
A: 104.16.132.229, 104.16.133.229
AAAA: 2606:4700::6810:84e5, 2606:4700::6810:85e5
PORTS OK 35ms
80/tcp open
443/tcp open
TLS OK 101ms
Subject cloudflare.com
Issuer WE1
Certificate Valid (expires in 57 days)
HTTP OK 673ms
Status 200 OK
URL https://www.cloudflare.com/
Redirects 1 redirect
Summary
Total: 918ms
Result: all checks passed
Phases: 4 phases
```
## Requirements
- Rust 1.85+ (for building from source)
- Root/admin privileges for raw-socket traceroute (`trace` ICMP)
## Documentation
- `USAGE.md` - full command examples and jq snippets
- `CONTRIBUTING.md` - development workflow and contribution guidelines
- `docs/OUTPUT_STYLE.md` - text output conventions
## License
MIT. See `LICENSE`.