Detector de versão IP
Este detector de versão de endereço IP verifica se uma string é um endereço IPv4 completo, um endereço IPv6 completo ou nenhum dos dois.
Executar grátis
Uma entrada válida retorna a versão detectada e uma representação canônica estável, mais fácil de comparar, armazenar e revisar. Um texto inválido retorna um motivo específico, como octeto IPv4 fora do intervalo, zero inicial proibido, excesso de grupos IPv6 ou compressão incorreta com dois-pontos duplos. O analisador é determinístico, não consulta a rede e aplica regras estritas em vez de tentar adivinhar o significado de uma entrada incompleta ou acompanhada de outros elementos.
Identifique com precisão a sintaxe IPv4 e IPv6
IPv4 e IPv6 representam endereços em formatos textuais muito diferentes, e verificar apenas a presença de ponto ou dois-pontos não é suficiente para validar nenhum deles. Este detector analisa a string inteira conforme as regras estruturais das duas versões. IPv4 deve ter exatamente quatro octetos decimais separados por pontos. Cada octeto deve estar entre 0 e 255, conter somente dígitos e não começar com zero. IPv6 usa oito grupos hexadecimais separados por dois-pontos e pode abreviar uma sequência de grupos zero com dois-pontos duplos. Um endereço IPv6 também pode terminar com um endereço IPv4 decimal incorporado, desde que a contagem total de grupos permaneça correta. O resultado informa IPv4 ou IPv6 somente depois que o valor completo passa pela validação. Um valor que apenas se parece com um endereço é classificado como nenhum dos dois e recebe um motivo que identifica a regra violada. Assim, você pode usar o resultado em validação de formulários, revisão de configurações, limpeza de importações e testes automatizados sem correr o risco de aceitar dados incorretos por uma suposição flexível demais.
Use a saída canônica em comparações e armazenamento
Um endereço IP válido pode ter mais de uma grafia, sobretudo no IPv6. Letras hexadecimais maiúsculas e minúsculas representam os mesmos valores, zeros iniciais dentro de um grupo não alteram o endereço e uma sequência de grupos zero pode ser comprimida. O resultado IPv6 canônico usa letras minúsculas, remove zeros iniciais desnecessários e comprime a sequência mais longa de dois ou mais grupos zero. Se houver sequências de mesmo tamanho, a primeira é comprimida. Componentes IPv4 decimais incorporados são convertidos nos grupos hexadecimais equivalentes, para que a resposta sempre apresente uma única forma IPv6 consistente. IPv4 é retornado com quatro octetos decimais comuns. Essas regras permitem comparar strings canônicas sem considerar duas grafias do mesmo endereço como destinos diferentes. Elas também ajudam a preparar logs, remover duplicatas de configurações, criar snapshots de teste ou apresentar um endereço para revisão humana. A canonicalização não realiza DNS, geolocalização, análise de sub-rede nem teste de alcance; ela altera somente a representação, sem mudar o endereço numérico.
Entenda os motivos de rejeição e os limites estritos
Quando o texto do endereço é inválido, a resposta informa que ele não pertence a nenhuma versão e explica a rejeição. Falhas comuns de IPv4 incluem octeto ausente, componente acima de 255, caracteres não decimais ou zero inicial que softwares antigos podem interpretar de outra forma. Falhas comuns de IPv6 incluem grupo com mais de quatro dígitos hexadecimais, quantidade incorreta de grupos expandidos, mais de um par de dois-pontos duplos ou compressão que não substitui grupo algum. Colchetes usados em URLs, comprimentos de prefixo CIDR, números de porta e identificadores de zona ficam fora deste contrato de entrada. Remova esses elementos e envie apenas o endereço. Esse limite estrito mantém a validação previsível entre navegadores, servidores e linguagens cujos analisadores podem aceitar formas históricas diferentes. Um endereço ausente ou que não seja string é erro de contrato da solicitação; uma string com sintaxe inválida é um resultado normal, acompanhado do motivo. O algoritmo não usa estado externo nem rede, portanto solicitações repetidas sempre concordam. A API custa US$ 0,002 por solicitação, e a versão no navegador pode ser executada localmente.
Casos de uso
Validar dados de configuração
Rejeite endereços de host malformados antes que cheguem a regras de firewall, ajustes de serviços ou modelos de implantação.
Normalizar um inventário de endereços
Converta grafias IPv6 equivalentes em uma representação canônica antes de comparar ou eliminar registros duplicados.
Explicar erros em formulários
Mostre um motivo sintático útil quando alguém informar algo que não seja um endereço IPv4 ou IPv6 completo.
Perguntas frequentes
O detector entra em contato com o endereço?
Não. Ele valida e formata o texto localmente, sem DNS, sondagem de rede, geolocalização ou consulta de reputação.
Prefixos CIDR são aceitos?
Não. Envie somente o endereço. Um sufixo como /24 ou /64 é uma notação de prefixo de rede e fica fora do contrato deste detector.
Por que octetos IPv4 com zeros iniciais são rejeitados?
Zeros iniciais historicamente causam ambiguidade entre decimal e octal. A notação decimal estrita evita interpretações inconsistentes.
Como um endereço IPv6 é canonicalizado?
As letras hexadecimais passam para minúsculas, os zeros iniciais dos grupos são removidos e a maior sequência elegível de zeros é comprimida com dois-pontos duplos.
Posso enviar uma URL IPv6 entre colchetes e com porta?
Não. Primeiro remova os colchetes e a porta, pois eles pertencem à sintaxe da URL ou do endpoint, não ao endereço IP.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. A ferramenta determinística do navegador também pode ser executada localmente na página.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/ip-version-detect \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"address":"2001:0db8:0000:0000:0000:ff00:0042:8329"}'const res = await fetch("https://api.kit.forhosting.com/dev/ip-version-detect", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"address": "2001:0db8:0000:0000:0000:ff00:0042:8329"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/ip-version-detect",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"address": "2001:0db8:0000:0000:0000:ff00:0042:8329"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/ip-version-detect", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"address":"2001:0db8:0000:0000:0000:ff00:0042:8329"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"address":"2001:0db8:0000:0000:0000:ff00:0042:8329"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/ip-version-detect", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"address": "2001:0db8:0000:0000:0000:ff00:0042:8329"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.ip_version_detect",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |