2017-08-20 7 views
2
addr = socket.gethostbyname('dalitstan.org') 
target = [addr] 
result, unans = traceroute(target,maxttl=32) 

私は上記のコードを使用しており、以下の出力を得ています。マシンとサーバーの間のホップ数、つまり以下の場合のホップ数を取得するにはどうすればよいですか? (以前のホップがICMPパケットで応答するので)Pythonでウェブサイトにホップ数を取得する方法

Begin emission: 
*Finished to send 32 packets. 
************************ 
Received 25 packets, got 25 answers, remaining 7 packets 
    185.53.178.6:tcp80 
1 192.168.43.1 11 
3 10.71.80.2  11 
4 172.16.26.245 11 
5 172.26.31.242 11 
11 49.44.18.38  11 
13 103.198.140.164 11 
14 103.198.140.27 11 
15 80.81.194.27 11 
16 217.64.161.25 11 
17 217.64.170.214 11 
18 185.53.178.6 SA 
19 185.53.178.6 SA 
20 185.53.178.6 SA 
21 185.53.178.6 SA 
22 185.53.178.6 SA 
23 185.53.178.6 SA 
24 185.53.178.6 SA 
25 185.53.178.6 SA 
26 185.53.178.6 SA 
27 185.53.178.6 SA 
28 185.53.178.6 SA 
29 185.53.178.6 SA 
30 185.53.178.6 SA 
31 185.53.178.6 SA 
32 185.53.178.6 SA 
25 

答えて

1

あなたが探している結果は、TCP層との最初の答えです。さらに正確に言うと、送信したパケットのうち、TCPの応答を得たTTLのほうが低いものを探しています。

Scapyでは、[TCP]result[TCP]を使用して、TCPレイヤを含むSndRcvListオブジェクトから(probe, answer)タプルを選択できます。私は十分に明確でない場合result.show()result[TCP].show()を比較することができます。

ここで、送信パケットのttl値を抽出するには、[snd[IP].ttl for snd, _ in result[TCP]]を使用します。あなただけのmin()使って最小値を取得する必要があります(パケットがソートされているので、実際または[0]またはnext()を使用して最初の値を、min()を使用すると、しかし、より安全であるような気がします):

result, _ = traceroute('dalitstan.org') 
min(snd[IP].ttl for snd, _ in result[TCP]) 
関連する問題