2017-10-10 10 views
0

実行時にscapy経由でRTT値を計算しようとしています。 wiresharkでもやったのと同じ仕事。しかし、両方の値はまったく一致しません。 sendpfast()メソッドがscapyで提供されている正確なタイムスタンプを取得できますが、キャプチャと同時に表示する方法は?同様に、それは送信 - 受信sr() scapyの機能で行うことができます。 scapyとwiresharkで捕捉されたRTTを以下に示す。Scapy:スカイで往復時間(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 
+0

wiresharkの時間は100倍近く変化することに注意してください。これは、アマゾンで4パケットを注文し、24時間、26時間、クリスマスとニューイヤー以内に到着したようです。 – phihag

+0

あなたは正しいです。しかし、可能性がある場合はキャプチャ全体を投稿できます。私は手動でいくつかの値をチェックし(reqと応答のタイムスタンプを差し引いて)、これらは正しく見えます。 –

答えて

0

RFC1323をチェックし、TSvalとTSecrを使用してRTTを計算できます。複雑さを避けるために、接続が確立されると、SYN-SYN/ACK-ACKを3ウェイハンドシェイクで試すことができます。このような何か...

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ヴァル2130701590

SYN/ACK => ECR 2130701590、TSヴァル41895331

ACK => TSヴァル2130701660

RTT = 2130701660 - 2130701590 = 70(私は の単位はミリ秒です)

>>> 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 
>>>