Use correct sequence numbers in TCP RST packets.
parent
3bd715e1bc
commit
6d8d3cb29d
|
@ -233,8 +233,9 @@ impl<'a, 'b: 'a,
|
|||
src_port: tcp_packet.dst_port(),
|
||||
dst_port: tcp_packet.src_port(),
|
||||
control: TcpControl::Rst,
|
||||
seq_number: 0,
|
||||
ack_number: Some(tcp_packet.seq_number() + 1),
|
||||
seq_number: tcp_packet.ack_number(),
|
||||
ack_number: Some(tcp_packet.seq_number() +
|
||||
tcp_packet.segment_len()),
|
||||
window_len: 0,
|
||||
payload: &[]
|
||||
};
|
||||
|
|
|
@ -182,6 +182,16 @@ impl<T: AsRef<[u8]>> Packet<T> {
|
|||
NetworkEndian::read_u16(&data[field::URGENT])
|
||||
}
|
||||
|
||||
/// Return the length of the segment, in terms of sequence space.
|
||||
#[inline(always)]
|
||||
pub fn segment_len(&self) -> i32 {
|
||||
let data = self.buffer.as_ref();
|
||||
let mut length = data.len() - self.header_len() as usize;
|
||||
if self.syn() { length += 1}
|
||||
if self.fin() { length += 1}
|
||||
length as i32
|
||||
}
|
||||
|
||||
/// Validate the packet checksum.
|
||||
///
|
||||
/// # Panics
|
||||
|
|
Loading…
Reference in New Issue