checkmy 0.1.2

Network diagnostic toolkit
# 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:

| Target | Example | Behavior |
|--------|---------|----------|
| 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

| Command | Purpose |
|---------|---------|
| `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
checkmy http https://example.com --json | jq '.response.status'
```

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`.