Back to projects

Oct 2026 - Present · Developer

Pingo

Encrypted messaging, resumable file transfers, and IPv4 VPN tunneling over ICMP.

Overview

Pingo explores using IPv4 ICMP as a shared transport for encrypted communication between two configured peers. Written in Python, it supports direct messages and file transfers alongside a VPN mode using Linux TUN or Windows Wintun.

Messages and files

Because ICMP does not guarantee delivery or ordering, Pingo adds fragment reassembly, acknowledgments, bounded retries, and duplicate suppression. Transfers adapt their timeouts to measured round-trip times and back off on loss. File transfers persist checkpoints across sessions and process restarts, verify the receiver's existing prefix before resuming, and check the completed file's size and SHA-256 hash.

IPv4 VPN

VPN mode carries IPv4 datagrams over the same authenticated transport. An adaptive congestion window and pacing control traffic, while inner TCP connections or applications handle packet loss and ordering. The application manages its own client routes, tunnel DNS, and kill-switch protection, with bounded reconnection and cleanup on normal exit. Exit forwarding and NAT require separate configuration.

Protocol and status

Two peers share a random 32-byte key. Session setup uses HMAC-SHA256 authentication and fresh challenges, with HKDF-SHA256 deriving separate directional keys for ChaCha20-Poly1305 encryption. Authenticated replay protection rejects duplicate packets. The protocol is custom, experimental, and unaudited, with no forward secrecy or promise of firewall traversal, anonymity, or censorship resistance.

Real Linux ICMP transfers, restart/resume behavior, and TUN routing have been tested. Live Windows VPN and tunnel DNS validation remain pending. Pingo currently supports two directly reachable IPv4 peers; IPv6, NAT traversal, and multiple peers are unsupported.

Pingo on GitHub

Back to projects