// Create an TCP header for an ACK request.
uint16_t source_port = static_cast<uint16_t> ( ( random() % 16383 ) + 49152 ); // same as random() % 65536;
uint16_t destination_port = 80;
- TcpHeader tcp_header = create_tcp_header(
+ TcpHeader tcp_header = create_ack_request(
source_port,
destination_port,
++SequenceNumber
send_ack_request( tcp_header );
}
+TcpHeader TcpPinger::create_ack_request(
+ const uint16_t source_port,
+ const uint16_t destination_port,
+ const uint16_t sequence_number
+) const
+{
+ // (5 words of 32 bits = 5 * 4 bytes = 20 bytes)
+ const uint8_t header_size_in_words = 5; // size in units of 32 bits
+ const uint16_t window_size_in_octets = 32768;
+
+ // Create an TCP header for an ACK request.
+ TcpHeader tcp_header;
+ tcp_header.source_port( source_port ); // assign an random ephemeral port number
+ tcp_header.destination_port( destination_port );
+ tcp_header.sequence_number( sequence_number );
+ tcp_header.header_length( header_size_in_words );
+ tcp_header.acknowledgment( true );
+ tcp_header.window_size( window_size_in_octets ); // window size
+
+ return tcp_header;
+}
+
void TcpPinger::send_ack_request( const TcpHeader &tcp_header )
{
// Encode the request packet.
schedule_timeout_rst_reply();
}
-TcpHeader TcpPinger::create_tcp_header(
- const uint16_t source_port,
- const uint16_t destination_port,
- const uint16_t sequence_number
-) const
-{
- // (5 words of 32 bits = 5 * 4 bytes = 20 bytes)
- const uint8_t header_size_in_words = 5; // size in units of 32 bits
- const uint16_t window_size_in_octets = 32768;
-
- // Create an TCP header for an ACK request.
- TcpHeader tcp_header;
- tcp_header.source_port( source_port ); // assign an random ephemeral port number
- tcp_header.destination_port( destination_port );
- tcp_header.sequence_number( sequence_number );
- tcp_header.header_length( header_size_in_words );
- tcp_header.acknowledgment( true );
- tcp_header.window_size( window_size_in_octets ); // window size
-
- return tcp_header;
-}
-
void TcpPinger::schedule_timeout_rst_reply()
{
// Wait up to N seconds for a reply.