如何使用python派生TSVal和TSecr TCP选项字段?

时间:2015-01-07 04:46:11

标签: python networking tcp scapy

我正在尝试为python网络项目开发一个小概念验证,但我遇到了一个障碍。有人能够解释我如何从python中的操作系统中获取TSVal和TSecr值吗? 我正在使用Scapy来查看我是否可以作为客户端连接到一个简单的python服务器程序。下面的陈述是我陷入困境的地方。

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

因此,如果有人可以推荐算法或python库来计算TSval和TSecr,那将非常感谢!

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为这两个值都应由您自己计算并分配给数据包。

scapy有可能会自动分配这些值。您可以尝试一下。但如果没有,你必须根据RFC自己计算。

TSV是Timestamp Value字段。它与序列号一起使用以唯一地标识段(因为序列号可以换行)。

TSER是Timestamp Echo Reply字段。这用于ACK消息。它包含最后收到的TSV值的副本。它可用于往返时间估算(RTT =当前时间 - TSER)。

这些字段在RFC 1323(TCP Extensions for High Performance)中正式描述:

TCP时间戳选项(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.