ipv6-only provides a complete set of tools for working in IPv6-only environments:
-
Core Library: IPv6 address and network types with full manipulation capabilities
-
CLI Tools: Command-line utilities for address validation, conversion, generation, and subnet calculation
-
Tunnel Integration: Hurricane Electric TunnelBroker setup and management scripts
-
Educational Resources: IPv6 primer and tutorial documentation
| Component | Description | Status |
|---|---|---|
|
Core IPv6Address and IPv6Network types with parsing, validation, type detection |
Implemented |
|
Utilities for compression, expansion, generation (link-local, ULA, random), EUI-64, reverse DNS |
Implemented |
|
Subnet calculator with division, supernet, containment, overlap detection |
Implemented |
|
Full command-line interface with subcommands |
Implemented |
HE Tunnel Scripts |
Hurricane Electric tunnel setup, update, and status checking |
Implemented |
Configuration |
Nickel-based configuration system |
Implemented |
ipv6-only/
+-- crates/
| +-- core/ # IPv6Address, IPv6Network types
| +-- utils/ # Address utilities (generation, conversion)
| +-- subnet/ # Subnet calculator
+-- src/
| +-- main.rs # CLI application entry point
+-- scripts/ # Hurricane Electric integration
| +-- he-tunnel-setup.sh
| +-- he-update-endpoint.sh
| +-- he-check-status.sh
| +-- he-cert-check.sh
+-- config/
| +-- ipv6-tools.ncl # Nickel configuration
+-- docs/
+-- IPv6_PRIMER.md # Educational content
+-- TUTORIAL.md # Usage tutorial# Validate single address
ipv6 validate 2001:db8::1
# Validate multiple addresses
ipv6 validate 2001:db8::1 fe80::1%eth0 ::1
# Validate networks
ipv6 validate --network 2001:db8::/32
# Quiet mode (exit code only)
ipv6 validate --quiet 2001:db8::1# Network information
ipv6 calc 2001:db8::/32 --info
# Divide into N subnets
ipv6 calc 2001:db8::/32 --divide 16
# Divide by new prefix length
ipv6 calc 2001:db8::/32 --prefix 48
# Get supernet
ipv6 calc 2001:db8::/48 --supernet 32
# Check address containment
ipv6 calc 2001:db8::/32 --contains 2001:db8::1
# JSON output
ipv6 calc 2001:db8::/32 --info --format json# Generate link-local address
ipv6 generate link-local
# Generate ULA (Unique Local Address)
ipv6 generate ula
# Generate random address in prefix
ipv6 generate random --prefix 2001:db8::/64
# Convert MAC to IPv6 (EUI-64)
ipv6 generate from-mac 00:11:22:33:44:55
# Generate multiple
ipv6 generate link-local --count 10# Compress address
ipv6 convert 2001:0db8:0000:0000:0000:0000:0000:0001 --compress
# Expand address
ipv6 convert 2001:db8::1 --expand
# Generate reverse DNS PTR
ipv6 convert 2001:db8::1 --reverse
# Binary representation
ipv6 convert 2001:db8::1 --binary
# All formats
ipv6 convert 2001:db8::1 --alluse ipv6_only_core::{IPv6Address, IPv6Network};
use ipv6_only_utils::{compress_address, generate_link_local};
use ipv6_only_subnet::IPv6SubnetCalculator;
// Parse and manipulate addresses
let addr = IPv6Address::new("2001:db8::1")?;
println!("Type: {}", addr.address_type());
println!("Compressed: {}", addr.compressed());
println!("Expanded: {}", addr.exploded());
// Network operations
let net = IPv6Network::new("2001:db8::/32")?;
println!("Contains 2001:db8::1: {}", net.contains(&addr));
// Subnet calculation
let calc = IPv6SubnetCalculator::new("2001:db8::/32")?;
let subnets = calc.divide_into_subnets(4)?;
for subnet in subnets {
println!("{}", subnet.network);
}-
Parse compressed and expanded formats
-
Zone ID support (
fe80::1%eth0) -
Address type detection (loopback, link-local, ULA, global, multicast)
-
Format conversion (compressed, expanded, binary, hex)
-
Serialization support (serde)
-
CIDR notation parsing
-
Network/broadcast address calculation
-
Subnet division and supernet aggregation
-
Address containment and overlap testing
-
Address enumeration for small networks
| Type | Prefix | Example |
|---|---|---|
Loopback |
|
|
Link-Local |
|
|
Unique Local (ULA) |
|
|
Global Unicast |
|
|
Multicast |
|
|
Documentation |
|
|
The project uses Nickel for configuration. See config/ipv6-tools.ncl:
{
network = {
default_prefix = "2001:db8::/32",
prefixes = {
site = 48,
subnet = 64,
host = 128,
},
},
scanning = {
common_ports = [22, 80, 443],
timeout = 2,
max_workers = 50,
},
}-
IPv6 Primer - Comprehensive IPv6 introduction
-
Tutorial - Step-by-step usage guide
-
Roadmap - Development roadmap