Carregando...

RDAP: O Sucessor do WHOIS (E por que você deveria parar de sofrer com o passado)

RDAP: O Sucessor do WHOIS (E por que você deveria parar de sofrer com o passado)

Estava criando uma ferramenta de WHOIS para o meu projeto de Web Tools e me deparei com um grande problema: o próprio WHOIS.

A premissa é simples: consultar a porta 43 de um servidor, enviar uma string e esperar uma resposta. O problema? A resposta nunca é igual de um sistema para outro e você precisa ficar remendando seu RegEx para funcionar. Não existe um padrão real. O Registro.br formata de um jeito, a Verisign de outro, a APNIC de outro.

Quem nunca escreveu um script de monitoramento que quebrou porque o registro mudou a frase "Domain Expiry Date:" para "Registry Expiry Date:"? Tentar normalizar essa saída com sed, awk e RegEx é um pesadelo que ninguém deveria ter em 2025.

Felizmente, o WHOIS está (lentamente) morrendo. O sucessor já está entre nós, chama-se RDAP (Registration Data Access Protocol) e, diferentemente do seu avô dos anos 80, ele foi feito para máquinas, não para humanos lendo terminais monocromáticos.

Um pouco de história

Isso não surgiu ontem. A comunidade técnica já estava cansada da bagunça da porta 43 há tempos:

  • 2012: O IETF começa a se mover e cria o grupo de trabalho WEIRDS (sim, o nome era esse) para modernizar isso.

  • 2015: Nascem as RFCs (7480 e amigas). O padrão estava criado.

  • 2019: A ICANN bate o martelo. Tornou-se obrigatório para registrars e registries de gTLDs (.com, .net, etc.) implementarem o RDAP.

Ou seja, já faz tempo que a gente deveria estar usando isso.

What is wrong with port 43?

O que há de errado com a porta 43?

O WHOIS é um protocolo baseado em texto puro. Ele não tem suporte nativo a internacionalização (tente consultar domínios com caracteres chineses ou emojis no WHOIS legado e veja a mágica falhar), não tem autenticação padronizada e, pior de tudo, não tem estrutura de dados. Cada um faz o que quiser da forma que quiser e quem for consumir o sistema que se vire.

O RDAP resolve isso trazendo a consulta de dados de registro para o século XXI. Em termos práticos:

  1. É HTTP(S): Nada de portas obscuras que firewalls corporativos bloqueiam. Roda na porta 443.

  2. É JSON: Finalmente! Dados estruturados que qualquer linguagem moderna (JS, Python, Go, Rust) consome tranquilamente.

  3. Suporta Redirecionamento: O servidor pode te mandar para a fonte autoritativa correta usando headers HTTP padrão.

Mão na massa: WHOIS vs RDAP

Vamos ver isso na prática. Digamos que eu queira inspecionar o bloco de IP 1.1.1.1 da Cloudflare.

No modo antigo, você roda whois 1.1.1.1 e recebe um muro de texto. Você precisa "parsear" visualmente onde começa o endereço, onde está o contato de abuso, etc.

No RDAP, é apenas uma chamada REST.

curl -X GET [https://rdap.apnic.net/ip/1.1.1.1](https://rdap.apnic.net/ip/1.1.1.1)

O resultado é um JSON limpo e previsível:

{
  "rdapConformance": [
    "history_version_0",
    "nro_rdap_profile_0",
    "cidr0",
    "rdap_level_0"
  ],
  "notices": [
    {
      "title": "Source",
      "description": [
        "Objects returned came from source",
        "APNIC"
      ]
    },
    {
      "title": "Terms and Conditions",
      "description": [
        "This is the APNIC WHOIS Database query service. The objects are in RDAP format."
      ],
      "links": [
        {
          "value": "https://rdap.apnic.net/ip/1.1.1.1",
          "rel": "terms-of-service",
          "href": "http://www.apnic.net/db/dbcopyright.html",
          "type": "text/html"
        }
      ]
    },
    {
      "title": "Whois Inaccuracy Reporting",
      "description": [
        "If you see inaccuracies in the results, please visit: "
      ],
      "links": [
        {
          "value": "https://rdap.apnic.net/ip/1.1.1.1",
          "rel": "inaccuracy-report",
          "href": "https://www.apnic.net/manage-ip/using-whois/abuse-and-spamming/invalid-contact-form",
          "type": "text/html"
        }
      ]
    }
  ],
  "country": "AU",
  "events": [
    {
      "eventAction": "registration",
      "eventDate": "2011-08-10T23:12:35Z"
    },
    {
      "eventAction": "last changed",
      "eventDate": "2023-04-26T22:57:58Z"
    }
  ],
  "name": "APNIC-LABS",
  "remarks": [
    {
      "description": [
        "APNIC and Cloudflare DNS Resolver project",
        "Routed globally by AS13335/Cloudflare",
        "Research prefix for APNIC Labs"
      ],
      "title": "description"
    },
    {
      "description": [
        "---------------",
        "All Cloudflare abuse reporting can be done via",
        "[email protected]",
        "---------------"
      ],
      "title": "remarks"
    }
  ],
  "links": [
    {
      "value": "https://rdap.apnic.net/ip/1.1.1.1",
      "rel": "self",
      "href": "https://rdap.apnic.net/ip/1.1.1.0/24",
      "type": "application/rdap+json"
    }
  ],
  "status": [
    "active"
  ],
  "type": "ASSIGNED PORTABLE",
  "ipVersion": "v4",
  "endAddress": "1.1.1.255",
  "startAddress": "1.1.1.0",
  "objectClassName": "ip network",
  "handle": "1.1.1.0 - 1.1.1.255",
  "entities": [
    {
      "roles": [
        "registrant"
      ],
      "events": [
        {
          "eventAction": "registration",
          "eventDate": "2017-08-08T23:21:55Z"
        },
        {
          "eventAction": "last changed",
          "eventDate": "2023-09-05T02:15:19Z"
        }
      ],
      "links": [
        {
          "value": "https://rdap.apnic.net/ip/1.1.1.1",
          "rel": "self",
          "href": "https://rdap.apnic.net/entity/ORG-ARAD1-AP",
          "type": "application/rdap+json"
        }
      ],
      "vcardArray": [
        "vcard",
        [
          [
            "version",
            {

            },
            "text",
            "4.0"
          ],
          [
            "fn",
            {

            },
            "text",
            "APNIC Research and Development"
          ],
          [
            "kind",
            {

            },
            "text",
            "org"
          ],
          [
            "adr",
            {
              "label": "6 Cordelia St"
            },
            "text",
            [
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ]
          ],
          [
            "tel",
            {
              "type": "voice"
            },
            "text",
            "+61-7-38583100"
          ],
          [
            "tel",
            {
              "type": "fax"
            },
            "text",
            "+61-7-38583199"
          ],
          [
            "email",
            {

            },
            "text",
            "[email protected]"
          ]
        ]
      ],
      "objectClassName": "entity",
      "handle": "ORG-ARAD1-AP"
    },
    {
      "roles": [
        "abuse"
      ],
      "events": [
        {
          "eventAction": "registration",
          "eventDate": "2011-04-12T17:56:54Z"
        },
        {
          "eventAction": "last changed",
          "eventDate": "2025-11-18T00:26:57Z"
        }
      ],
      "remarks": [
        {
          "description": [
            "[email protected] was validated on 2021-02-09"
          ],
          "title": "remarks"
        }
      ],
      "links": [
        {
          "value": "https://rdap.apnic.net/ip/1.1.1.1",
          "rel": "self",
          "href": "https://rdap.apnic.net/entity/IRT-APNICRANDNET-AU",
          "type": "application/rdap+json"
        }
      ],
      "vcardArray": [
        "vcard",
        [
          [
            "version",
            {

            },
            "text",
            "4.0"
          ],
          [
            "fn",
            {

            },
            "text",
            "IRT-APNICRANDNET-AU"
          ],
          [
            "kind",
            {

            },
            "text",
            "group"
          ],
          [
            "adr",
            {
              "label": "PO Box 3646\nSouth Brisbane, QLD 4101\nAustralia"
            },
            "text",
            [
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ]
          ],
          [
            "email",
            {

            },
            "text",
            "[email protected]"
          ],
          [
            "email",
            {
              "pref": "1"
            },
            "text",
            "[email protected]"
          ]
        ]
      ],
      "objectClassName": "entity",
      "handle": "IRT-APNICRANDNET-AU"
    },
    {
      "roles": [
        "administrative",
        "technical"
      ],
      "events": [
        {
          "eventAction": "registration",
          "eventDate": "2023-04-26T00:42:16Z"
        },
        {
          "eventAction": "last changed",
          "eventDate": "2024-07-18T04:37:37Z"
        }
      ],
      "links": [
        {
          "value": "https://rdap.apnic.net/ip/1.1.1.1",
          "rel": "self",
          "href": "https://rdap.apnic.net/entity/AIC3-AP",
          "type": "application/rdap+json"
        }
      ],
      "vcardArray": [
        "vcard",
        [
          [
            "version",
            {

            },
            "text",
            "4.0"
          ],
          [
            "fn",
            {

            },
            "text",
            "APNICRANDNET Infrastructure Contact"
          ],
          [
            "kind",
            {

            },
            "text",
            "group"
          ],
          [
            "adr",
            {
              "label": "6 Cordelia St South Brisbane QLD 4101"
            },
            "text",
            [
              "",
              "",
              "",
              "",
              "",
              "",
              ""
            ]
          ],
          [
            "tel",
            {
              "type": "voice"
            },
            "text",
            "+61 7 3858 3100"
          ],
          [
            "email",
            {

            },
            "text",
            "[email protected]"
          ]
        ]
      ],
      "objectClassName": "entity",
      "handle": "AIC3-AP"
    }
  ],
  "cidr0_cidrs": [
    {
      "v4prefix": "1.1.1.0",
      "length": 24
    }
  ],
  "port43": "whois.apnic.net"
}

Olhe para isso. Sem parsing maluco. Se eu quiser saber o nome da entidade, eu acesso $.entities['0'].vcardArray[1][1][3]. Pronto.

Note o uso do jCard (vCard em JSON) para os dados de contato. É um padrão dentro de um padrão, o que facilita muito a integração com sistemas de CRM ou ticketing.

Um detalhe que salva vidas aqui é o campo events. No WHOIS, as datas vêm em formatos aleatórios (DD-MM-YYYY, MM/DD/YYYY, YYYY.MM.DD). No RDAP, é tudo ISO 8601 (YYYY-MM-DDTHH:MM:SSZ). Se você já teve que lidar com fuso horários e formatos de data em scripts de automação, sabe a dor de cabeça.

O universo além do IP e Domínio

Muita gente acha que WHOIS/RDAP serve só para ver "de quem é esse site" ou "de onde vem esse IP", mas o protocolo RDAP expande o horizonte. A estrutura de URL é padronizada para consultar praticamente qualquer objeto da internet:

  • Domínios: GET /domain/example.com — O clássico.

  • IPs: GET /ip/1.1.1.1 — Suporta IPv4 e IPv6.

  • Entidades: GET /entity/GOOGL-123 — Quer saber quem é a pessoa ou organização por trás de um handle específico? É aqui.

  • Nameservers: GET /nameserver/ns1.example.com — Para debugar problemas de delegação DNS.

  • Autnum (ASNs): GET /autnum/13335 — Essencial para quem trabalha com BGP e roteamento. Você consegue ver os contatos técnicos e de abuso de um Sistema Autônomo inteiro com uma requisição.

Isso transforma o RDAP em uma ferramenta poderosa não só para "curiosidade", mas para automação de segurança e Engenharia de Redes. Você pode criar um script que detecta um ataque DDoS, extrai o ASN do IP atacante via RDAP, pega o e-mail de abuso no JSON (que vem estruturado dentro de entities com a role abuse) e gera um relatório automático. Tente fazer isso com o texto puro do WHOIS e boa sorte.

The Magic of Bootstrap

A mágica do Bootstrap (O poder do redirecionamento)

Aqui é onde a coisa fica interessante. A grande dúvida técnica geralmente é: "Como eu sei qual URL chamar para um IP aleatório ou um TLD obscuro?"

No WHOIS antigo, seu cliente precisava ter uma lista hardcoded ou adivinhar. No RDAP, existe o conceito de Bootstrap, mas o pulo do gato é como o protocolo lida com redirecionamentos.

A IANA mantém arquivos JSON gigantes mapeando quem é dono do quê. Mas você não precisa baixar isso e implementar a lógica se não quiser. Você pode usar um "roteador" de consultas.

Um exemplo brilhante é o serviço rdap.org. Ele funciona como um "middleware" inteligente. Veja o fluxo:

  1. Você manda a requisição para ele: GET https://rdap.org/domain/google.com

  2. Ele consulta a tabela da IANA internamente.

  3. Ele vê que .com é da Verisign.

  4. Ele não faz proxy. Ele te devolve um HTTP 302 Found com o header Location: https://rdap.verisign.com/com/v1/domain/google.com.

  5. Seu cliente HTTP (curl, axios, requests) segue o redirecionamento automaticamente e busca o JSON na fonte oficial.

Isso simplifica absurdamente a arquitetura da sua ferramenta. Você aponta tudo para um lugar só e deixa o protocolo HTTP fazer o trabalho sujo de te levar ao servidor correto. É elegante e elimina a necessidade de manter bancos de dados locais de roteamento.

Códigos de Erro que fazem sentido

Outra vantagem enorme para quem desenvolve ferramentas: Códigos HTTP.

Se um domínio não existe:

  • WHOIS: Retorna texto "No match", "Not found", "Domain not found", dependendo do humor do sysadmin naquele dia.

  • RDAP: Retorna HTTP 404.

Se você está sendo rate-limited (bloqueado por excesso de consultas):

  • WHOIS: A conexão cai ou você recebe um texto bravo.

  • RDAP: Retorna HTTP 429 (Too Many Requests).

Isso simplifica drasticamente a lógica de tratamento de erros em scripts de automação.

Conclusion

Conclusão

O WHOIS cumpriu seu papel. Ele vem de uma época em que a internet cabia numa lista telefônica. Mas para operações modernas, automação de segurança e SRE, ele é um dinossauro.

Se você está construindo ferramentas internas, bots de verificação ou apenas precisa de dados confiáveis sobre ASNs e domínios, esqueça o passado. O RDAP é mais rápido, suporta HTTPS e fala a língua da web.

Para quem quiser testar agora sem instalar nada, tente consultar um domínio brasileiro direto no navegador ou via terminal (note o -L para seguir o redirect caso necessário):

curl -L -H "Accept: application/rdap+json" [http://rdap.org/domain/youtube.com.br](http://rdap.org/domain/youtube.com.br)

Ou utilize essa ferramenta que eu construí (ainda está em beta) para ver a magia acontecer.

Seus scripts de monitoramento vão agradecer.

Comentários

0