use etherparse::*;
use std::io::Write;
fn main() {
let with_udp_checksum = true;
let mut out = Vec::<u8>::with_capacity(
Ethernet2Header::LEN + Ipv4Header::MAX_LEN + UdpHeader::LEN + 8, );
let udp_payload = [1, 2, 3, 4, 5, 6, 7, 8];
Ethernet2Header {
destination: [1, 2, 3, 4, 5, 6],
source: [11, 12, 13, 14, 15, 16],
ether_type: ether_type::IPV4,
}
.write(&mut out)
.unwrap();
let ip_header = Ipv4Header::new(
(UdpHeader::LEN + udp_payload.len()) as u16,
20, ip_number::UDP, [192, 168, 1, 42], [192, 168, 1, 1], )
.unwrap();
ip_header.write(&mut out).unwrap();
if with_udp_checksum {
UdpHeader::with_ipv4_checksum(
0, 42, &ip_header, &udp_payload, )
.unwrap()
.write(&mut out)
.unwrap();
} else {
UdpHeader::without_ipv4_checksum(
0, 42, udp_payload.len(), )
.unwrap()
.write(&mut out)
.unwrap();
}
out.write_all(&udp_payload).unwrap();
println!("{:?}", &out);
}