We will create a fully functional ICMP ping utility in Rust from scratch. Starting with a bare project skeleton, we will gradually add command-line parsing, DNS resolution, raw socket management, and ICMP packet construction using the pnet crate.
Along the way, we will learn how ping actually works at the protocol level: we will assemble Echo Request packets byte by byte, calculate Internet checksums, filter replies by process ID and sequence number, and measure round-trip delay with monotonic clocks. By the end, the tool will behave like a real ping command: resolve host names, send repeated requests with configurable intervals, and report the time for each packet.