Anatomia de uma URL
Quem manda num link é o domínio registrado, no fim do host. O resto é texto que o dono escreve como quiser.
Pegue este link, que chegou num SMS "do banco":
https://bancosesmaria.test.atualiza-cadastro.example/bancosesmaria.test?ag=0012
Ele tem quatro pedaços:
| Pedaço | No exemplo | Quem escolhe |
|---|---|---|
| esquema | https |
o protocolo de acesso |
| host | bancosesmaria.test.atualiza-cadastro.example |
quem registrou o domínio, no fim do host |
| caminho | /bancosesmaria.test |
o dono do site, com qualquer texto |
| consulta | ?ag=0012 |
o dono do site, com qualquer texto |
O host vai de :// até a primeira /, e se lê da direita para a esquerda. A última parte, example, é o domínio de topo (TLD). A parte logo antes, atualiza-cadastro, é o nome que alguém comprou. As duas juntas, atualiza-cadastro.example, formam o domínio registrado: quem o registrou controla o link inteiro. Tudo o que fica à esquerda (bancosesmaria.test.) são subdomínios, que esse dono cria com o nome que quiser, inclusive o de um banco.
Então o link acima é de quem registrou atualiza-cadastro.example, não do banco. O nome do banco aparece duas vezes, e as duas são disfarce.
Três cuidados:
- Em sufixos de duas partes, como
.com.brou.gov.br, o domínio registrado leva três partes do fim: o nome mais o sufixo inteiro. A lista de quais sufixos existem se chama lista de sufixos públicos. - Um
@antes do host muda tudo: emhttps://[email protected]/, o que vem antes do@é só um "nome de usuário", e o host éoutro.example. - Um encurtador esconde o destino. Para ver para onde ele leva sem abrir a página, peça só os cabeçalhos com
curl -sIL: cada resposta301ou302traz o próximo endereço no cabeçalhoLocation, e o-Lsegue a cadeia até o fim.
$ curl -sIL https://encurta.test/x1
HTTP/1.1 301 Moved Permanently
Location: https://promo.desconto-ja.example/?destino=https%3A%2F%2Fpampamarket.test
HTTP/1.1 302 Found
Location: https://pampamarket.test.cupom-gratis.example/
HTTP/1.1 200 OK
Só o Location leva o navegador adiante. O parâmetro destino= do primeiro passo é texto dentro da URL, posto ali para parecer a loja; o destino real é o último Location, cujo domínio registrado é cupom-gratis.example.
Em Python, urllib.parse.urlsplit(url).hostname devolve o host, e ".".join(host.split(".")[-2:]) pega as duas últimas partes (para .com.br, pegue três).