crafter 0.3.2

Packet-level network interaction for Rust tools and agents.
Documentation
mod common;

use common::{print_help_if_requested, ExampleResult};
use crafter::prelude::*;
use std::net::Ipv4Addr;

fn main() -> ExampleResult<()> {
    if print_help_if_requested(
        "usage: cargo run --example null_loopback --\n\nBuild, compile, and decode a BSD null/loopback IPv4 ICMP packet offline.",
    ) {
        return Ok(());
    }

    let packet = NullLoopback::ipv4()
        / Ipv4::new()
            .src(Ipv4Addr::LOCALHOST)
            .dst(Ipv4Addr::LOCALHOST)
            .ipv4_protocol(Ipv4Protocol::Icmpv4)
        / Icmpv4::echo_request().id(0x1111).seq(1)
        / Raw::from("null-loopback");
    let bytes = packet.compile()?;
    let decoded = Packet::decode_from_link(LinkType::NullLoopback, bytes.as_bytes())?;

    println!("example: null_loopback");
    println!("mode: offline");
    println!("decoded summary: {}", decoded.summary());
    for (index, layer) in decoded.iter().enumerate() {
        println!("layer {}: {}", index + 1, layer.summary());
    }
    println!("hexdump:\n{}", bytes.hexdump());

    Ok(())
}