How to Derive the TSVal and TSecr TCP option field

2019-04-14 06:29发布

问题:

I'm trying to develop a small proof-of-concept for a python networking project but I've come across a hurdle. Would anyone be able to explain how I could derive the TSVal and TSecr values from the Operating system in python? I'm using Scapy to see if I could connect to a simple python server program as a client. The statement below is where I'm sort of stuck.

TCP(flags='S', options=[('Timestamp', (TSval, TSecr))])

So if anyone could recommend an algorithm or a python library to calculate the TSval and TSecr, it would be very much appreciated!

Thanks in advance!

回答1:

I think both values should be calculated by yourself and assign them to the packet.

There is chance that scapy will assign these values automatically.You can have a try. But if not, you have to calculated it by yourself according to the RFC.

TSV is the Timestamp Value field. It is used in conjunction with sequence number to uniquely identify segments (since sequence numbers may wrap).

TSER is the Timestamp Echo Reply field. This is used in ACK messages. It holds a copy of the last TSV value received. It can be used for round trip time estimation (RTT = current time - TSER).

The fields are formally described in RFC 1323 (TCP Extensions for High Performance):

TCP Timestamps Option (TSopt):

 Kind: 8

 Length: 10 bytes

  +-------+-------+---------------------+---------------------+
  |Kind=8 |  10   |   TS Value (TSval)  |TS Echo Reply (TSecr)|
  +-------+-------+---------------------+---------------------+
      1       1              4                     4

 The Timestamps option carries two four-byte timestamp fields.
 The Timestamp Value field (TSval) contains the current value of
 the timestamp clock of the TCP sending the option.

 The Timestamp Echo Reply field (TSecr) is only valid if the ACK
 bit is set in the TCP header; if it is valid, it echos a times-
 tamp value that was sent by the remote TCP in the TSval field
 of a Timestamps option.  When TSecr is not valid, its value
 must be zero.  The TSecr value will generally be from the most
 recent Timestamp option that was received; however, there are
 exceptions that are explained below.