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

관련 정보