web-dev-qa-db-ja.com

tracerouteは、Linux(仮想マシン)では* * *のみを表示しますが、WindowsのすべてのIPを正しく表示します

Windows PowerShellでgoogleにtracertを実行すると、すべてのステーションのIPアドレスが正しく表示されます。

ただし、Linuxの仮想マシンで同じサーバーに対して同じことを行うと、* **しか表示されません。

 1  _gateway (10.0.2.2)  5.955 ms  5.568 ms  5.228 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

なぜこれ?

1
infoclogged

WindowstracertとLinuxtracerouteがデフォルトで使用するパケットは異なります。 Windows tracertはICMPパケットを送信し、LinuxtracerouteはUDPパケットを送信します。この例では、UDPポートは各ホップでブロックされていますが、ICMPは許可されているため、表示されている不一致が説明されます。

から ウィキペディア:traceroute

Unixライクなオペレーティングシステムでは、tracerouteはデフォルトで、33434から33534の範囲の宛先ポート番号を持つ一連のユーザーデータグラムプロトコル(UDP)パケットを送信します。 Linux、FreeBSD、NetBSD、OpenBSD、DragonFly BSD、およびmacOSに同梱されているtracerouteの実装には、ICMPエコー要求パケット(-I)、またはUDPなどの任意のプロトコル(-P)を使用するオプションが含まれていますTCP TCP SYNパケット、またはICMPを使用します。

Windowsでは、tracertは、tracerouteがデフォルトで送信するUDPパケットではなく、ICMPエコー要求パケットを送信します。

-Iオプションを追加することにより、LinuxでtracerouteにICMPパケットを使用させることができます。

From man traceroute

traceroute

パケットがネットワークホストにたどるルートを印刷します。

構文
traceroute [options] Host [packetsize]

オプション:

 -I    Use ICMP ECHO for probes
2
n8te