mtr -uはどのUDP宛先ポートを使用しますか?

mtr -uはどのUDP宛先ポートを使用しますか?

tracerouteデフォルトでは、UDPパケットはポート33434(以上)に送信されます。

と仮定するmtr -u手動ホームページフラッグハブ)同じ操作を実行しますが、宛先ポート番号を確認するための文書またはテスト結果が見つかりません。

mtr -uたとえば、ターゲットポート33434を使用してからそれを増やしますかtraceroute

答え1

長い話を短くデフォルトでは、次から始まります。33000そして起きてください。

同時にネットワークトレースを実行すると、これを観察できます。

tcpdump -i any -n host 8.8.8.8 &
mtr -u --report -c 1 8.8.8.8
21:21:50.777482 IP [redacted].31507 > 8.8.8.8.33000: UDP, length 36
21:21:50.877579 IP [redacted].31507 > 8.8.8.8.33001: UDP, length 36
21:21:50.977694 IP [redacted].31507 > 8.8.8.8.33002: UDP, length 36
21:21:51.077850 IP [redacted].31507 > 8.8.8.8.33003: UDP, length 36
21:21:51.177966 IP [redacted].31507 > 8.8.8.8.33004: UDP, length 36
21:21:51.278081 IP [redacted].31507 > 8.8.8.8.33005: UDP, length 36
21:21:51.378198 IP [redacted].31507 > 8.8.8.8.33006: UDP, length 36
21:21:51.478341 IP [redacted].31507 > 8.8.8.8.33007: UDP, length 36
21:21:51.578498 IP [redacted].31507 > 8.8.8.8.33008: UDP, length 36
21:21:51.678646 IP [redacted].31507 > 8.8.8.8.33009: UDP, length 36
21:21:51.778801 IP [redacted].31507 > 8.8.8.8.33010: UDP, length 36
21:21:51.878949 IP [redacted].31507 > 8.8.8.8.33011: UDP, length 36
21:21:51.979117 IP [redacted].31507 > 8.8.8.8.33012: UDP, length 36

これがコードの理由です。

ソースコードは次の場所にあります。https://github.com/traviscross/mtr

これを分析すると、コマンドライン引数の解析中にTCPとUDP間の異なる動作を観察できます。

    case 'u':
        if (ctl->mtrtype != IPPROTO_ICMP) {
            error(EXIT_FAILURE, 0,
                  "-u , -T and -S are mutually exclusive");
        }
        ctl->mtrtype = IPPROTO_UDP;
        break;
    case 'T':
        if (ctl->mtrtype != IPPROTO_ICMP) {
            error(EXIT_FAILURE, 0,
                  "-u , -T and -S are mutually exclusive");
        }
        if (!ctl->remoteport) {
            ctl->remoteport = 80;
        }
        ctl->mtrtype = IPPROTO_TCP;

したがって、UDPにはデフォルトでポートが設定されていませんが、80TCPにはデフォルトでポートが設定されています。

mtr.h持つ

#define MinPort 1024
#define MaxPort 65535

しかし、これは誤解を招き、実際の状況が起こっていますui/net.c

  1. net_send_query着信電話new_sequence
  2. 結果を次に渡します。send_probe_command
  3. new_sequenceこのファイルにstatic int next_sequence = MinSequence;

これで何度もジャンプしてから次の地点に到着しますset_udp_ports

    if (param->dest_port) {
...
    } else {
        udp->dstport = htons(sequence);

つまり、「シーケンス」番号は実際にはUDP宛先ポートです。

振り返ると、次ui/net.cのように定義されていることがわかります。

#define MinSequence 33000
#define MaxSequence 65536

関連情報