web-dev-qa-db-ja.com

tracerouteがICMPパケットではなくUDPパケットを送信するのはなぜですか?

Stevens(TCP/IP Illustrated)によると、tracerouteプログラムは、UDPパケットを宛先ホストに増分TTL(1、2、3など)で送信します。 ICMP TTL EXPIREDメッセージから中間ホップ情報を取得します。
destinationreached」条件はICMP PORT UNREACHABLEメッセージです。これは、tracerouteがランダムポートをアドレス指定しているためです。多数(つまり、誰かがそこで聞いている可能性は低い)
私の質問は次のとおりです。たとえば、ICMPエコー要求メッセージ(TTLの増加)を使用するのではなく、UDPパケットを使用する技術的な理由(欠点、RFCなど)はありますか? echo reply answerを終了条件として使用しますか?
ICMPエコー応答が途中のファイアウォールまたは他のネットデバイスによって除外される可能性があることを理解していますが、これはUDPパケットにも発生する可能性があると思います;)

どうもありがとう
セルジオ

14
sergico

これは実際には、tracerouteを実行する「古い」方法です。主な動機は、ICMPパケットの送信(rawソケットまたは同等のもの)のように、プレーンなUDPパケットの送信に特別な特権が必要ないことだったと思います。そのため、たとえばpingは通常rootにsetuidされますが、これはセキュリティ面で大きなリスクです。

現在、tracerouteはICMPとTCPプローブパケットもサポートしているため、ファイアウォールをこっそり通過できる可能性が高く、考慮せずに展開されない可能性が高くなります。これは、 tracerouteは、システムのsetuid rootでもある可能性があります。manページ、特に使用可能なメソッドに関する部分を参照してください。 http://linux.die.net/man/8/traceroute

13
ldx