Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pub fn build_pkt<'a>(collector: &Collector, packet: &'a mut [u8]) -> TcpPacket<'a> {
- const IPV4_HEADER_LEN: usize = 20;
- {
- // construct IP header
- let mut ip_header = MutableIpv4Packet::new(packet).unwrap();
- ip_header.set_version(4);
- ip_header.set_header_length(5);
- // Miss: type of service
- // Miss: total length
- ip_header.set_identification(random::<u16>());
- ip_header.set_flags(Ipv4Flags::DontFragment);
- // Miss: fragment offset
- ip_header.set_ttl(128);
- ip_header.set_next_level_protocol(Tcp);
- ip_header.set_source(collector.src_ip);
- ip_header.set_destination(collector.dst_ip);
- let checksum = checksum(&ip_header.to_immutable());
- ip_header.set_checksum(checksum);
- }
- {
- // construct TCP header
- let mut tcp_header =
- MutableTcpPacket::new(&mut packet[IPV4_HEADER_LEN..]).unwrap();
- tcp_header.set_source(collector.src_port);
- tcp_header.set_destination(collector.dst_port);
- tcp_header.set_sequence(random::<u32>());
- // Miss: ACK
- tcp_header.set_data_offset(5);
- // Miss: Reserved
- tcp_header.set_flags(TcpFlags::SYN);
- tcp_header.set_window(29200);
- tcp_header.set_urgent_ptr(0);
- let checksum = ipv4_checksum(
- &tcp_header.to_immutable(),
- &collector.src_ip,
- &collector.dst_ip,
- );
- tcp_header.set_checksum(checksum);
- }
- TcpPacket::new(&'a packet).unwrap()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement