Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scapy:使用Scapy计算往返时间(RTT)_Python_Wireshark_Scapy_Roundtrip - Fatal编程技术网

Python Scapy:使用Scapy计算往返时间(RTT)

Python Scapy:使用Scapy计算往返时间(RTT),python,wireshark,scapy,roundtrip,Python,Wireshark,Scapy,Roundtrip,我试图在运行时通过scapy计算RTT值。和我对wireshark做的任务一样。但两者的值根本不匹配。我可以通过scapy中提供的sendpfast()方法获得准确的时间戳,但如何同时捕获和显示?就像使用scapy的send-receivesr()功能一样。下面可以看到scapy和wireshark捕获的RTT **scapy** **wireshark** 0.1039998531 0,110971 0.0880000591 0,001198 0.1029999256

我试图在运行时通过scapy计算RTT值。和我对wireshark做的任务一样。但两者的值根本不匹配。我可以通过scapy中提供的
sendpfast()
方法获得准确的时间戳,但如何同时捕获和显示?就像使用scapy的send-receive
sr()
功能一样。下面可以看到scapy和wireshark捕获的RTT

**scapy**     **wireshark**
0.1039998531    0,110971
0.0880000591    0,001198
0.1029999256    0,096224
0.0959999561    0,012241
0.1109998226    0,001866
0.0909998417    0,11562
0.1110000610    0,002541
0.1029999256    0,116533
0.1029999256    0,001403
0.1030001640    0,102193
0.1009998322    0,002144

您可以检查RFC1323,并使用TSval和TSecr计算RTT。为了避免复杂性,当建立连接时,您可以在三向握手上尝试使用SYN-SYN/ACK-ACK。像这样的

12:02:22.549838 IP xxx.xxx.xxx.xxx.34400 > yyy.yyy.yyy.yyy.80: Flags [S], seq 3721025326, win 26883, options [mss 8961,sackOK,TS val 2130701590 ecr 0,nop,wscale 7], length 0

12:02:22.827325 IP yyy.yyy.yyy.yyy.80 > xxx.xxx.xxx.xxx.34400: Flags [S.], seq 506523745, ack 3721025327, win 42408, options [mss 1380,sackOK,TS val 41895331 ecr 2130701590,nop,wscale 8], length 0

12:02:22.827383 IP xxx.xxx.xxx.xxx.34400 > yyy.yyy.yyy.yyy.80: Flags [.], ack 1, win 211, options [nop,nop,TS val 2130701660 ecr 41895331], length 0
SYN=>TS val 213070190

同步/确认=>ecr 2130701590,TS val 41895331

确认=>TS val 2130701660

RTT=2130701660-2130701590=70(我认为 单位为毫秒)


请注意,wireshark时间的变化系数接近100。就好像你在亚马逊上订购了4包,它们将在24小时、26小时、圣诞节和新年内到达。你是对的。但如果有可能的话,我可以发布整个捕获过程。我已经手动检查了一些值(通过减去req和回复时间戳),这些值似乎是正确的。
>>> capture = sniff(filter="port 80", timeout = 10, count = 50)
>>> tsvaltmp = 0
>>> tsecrtmp = 0
>>> for pkt in capture:
...   tsdata=dict(pkt['TCP'].options)
...   tsvalpkt = tsdata['Timestamp'][0]
...   tsecrpkt = tsdata['Timestamp'][1]
...   if tsvaltmp == tsecrpkt:
...     rtt = tsvalpkt - tsecrtmp
...     if rtt != 0 and tsecrtmp != 0:
...       print rtt
...   tsvaltmp = tsvalpkt
...   tsecrtmp = tsecrpkt
... 
6014
8
8
8
6310
9
>>>