Advertisement
Guest User

Untitled

a guest
Jul 21st, 2018
656
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.55 KB | None | 0 0
  1. pub fn build_pkt<'a>(collector: &Collector, packet: &'a mut [u8]) -> TcpPacket<'a> {
  2.    const IPV4_HEADER_LEN: usize = 20;
  3.    {
  4.        // construct IP header
  5.        let mut ip_header = MutableIpv4Packet::new(packet).unwrap();
  6.        ip_header.set_version(4);
  7.        ip_header.set_header_length(5);
  8.        // Miss: type of service
  9.        // Miss: total length
  10.        ip_header.set_identification(random::<u16>());
  11.        ip_header.set_flags(Ipv4Flags::DontFragment);
  12.        // Miss: fragment offset
  13.        ip_header.set_ttl(128);
  14.        ip_header.set_next_level_protocol(Tcp);
  15.        ip_header.set_source(collector.src_ip);
  16.        ip_header.set_destination(collector.dst_ip);
  17.        let checksum = checksum(&ip_header.to_immutable());
  18.        ip_header.set_checksum(checksum);
  19.    }
  20.    {
  21.        // construct TCP header
  22.        let mut tcp_header =
  23.            MutableTcpPacket::new(&mut packet[IPV4_HEADER_LEN..]).unwrap();
  24.        tcp_header.set_source(collector.src_port);
  25.        tcp_header.set_destination(collector.dst_port);
  26.        tcp_header.set_sequence(random::<u32>());
  27.        // Miss: ACK
  28.        tcp_header.set_data_offset(5);
  29.        // Miss: Reserved
  30.        tcp_header.set_flags(TcpFlags::SYN);
  31.        tcp_header.set_window(29200);
  32.        tcp_header.set_urgent_ptr(0);
  33.        let checksum = ipv4_checksum(
  34.            &tcp_header.to_immutable(),
  35.            &collector.src_ip,
  36.            &collector.dst_ip,
  37.        );
  38.        tcp_header.set_checksum(checksum);
  39.    }
  40.    TcpPacket::new(&'a packet).unwrap()
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement