Que port (es) de destino UDP usa o mtr -u?

1

traceroute envia pacotes UDP para a porta 33434 (e acima) por padrão.

Eu assumo mtr -u ( manual , homepage , github ) faz o mesmo, mas não consigo encontrar nenhuma documentação ou teste resultados para verificar os números das portas de destino.

O mtr -u usa a porta de destino 33434 e, em seguida, incrementa, como traceroute ?

    
por P1h3r1e3d13 29.06.2018 / 22:49

1 resposta

3

TL; DR Por padrão, ele começa em 33000 e sobe.

Você pode observá-lo se você executar um rastreamento de rede ao mesmo tempo:

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

Aqui está o porquê no código.

O código-fonte está no link

Se você analisar, observe o comportamento diferente entre TCP e UDP durante a análise dos argumentos da linha de comando:

    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;

Portanto, nenhuma porta é definida por padrão para UDP, onde é 80 por padrão para TCP.

mtr.h tem

#define MinPort 1024
#define MaxPort 65535

mas isso é enganoso, o material verdadeiro acontece em ui/net.c .

  1. net_send_query chamadas new_sequence
  2. e os resultados são passados entre outras coisas para send_probe_command
  3. new_sequence neste arquivo tem static int next_sequence = MinSequence;

Agora, depois de muitos saltos, você chega em set_udp_ports , que tem:

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

Em suma, o número "sequence" é realmente a porta de destino do UDP.

E se voltarmos a ui/net.c , vemos que é definido como:

#define MinSequence 33000
#define MaxSequence 65536
    
por 29.06.2018 / 23:35