Um endereço, quatro representações
Um IPv4 é um inteiro sem sinal de 32 bits. A notação pontuada divide esses bits em quatro octetos e escreve cada um em decimal. As outras formas aparecem em situações bem concretas: binário para subnetting, hexadecimal em capturas de pacote e em logs de kernel, inteiro em bancos de dados e bases de geolocalização.
Exemplo: 192.168.1.1
| Octeto | Decimal | Binário | Hex |
|---|---|---|---|
| 1 | 192 | 11000000 | C0 |
| 2 | 168 | 10101000 | A8 |
| 3 | 1 | 00000001 | 01 |
| 4 | 1 | 00000001 | 01 |
hex = 0xC0A80101
Decimal para binário de cabeça
Use os pesos 128, 64, 32, 16, 8, 4, 2, 1. Para 168: cabe 128 (sobra 40), não cabe 64, cabe 32 (sobra 8), não cabe 16, cabe 8 (sobra 0). Bits: 10101000. Com prática, os valores de máscara (128, 192, 224, 240, 248, 252, 254, 255) ficam automáticos.
Onde cada formato aparece
- Binário: cálculo de sub-redes, sumarização e wildcards. A fronteira entre rede e host só é visível em binário.
- Hexadecimal: saída do Wireshark e do
tcpdump -X, arquivo/proc/net/tcpdo Linux (em ordem de bytes do host, ou seja, invertido em x86), máscara em hex na saída doifconfigdo BSD/macOS (netmask 0xffffff00). - Inteiro: colunas de banco de dados (armazenar IPv4 como inteiro facilita consultas por faixa com
BETWEEN), bases GeoIP e APIs.
Na linha de comando
# Linux: hex para inteiro
printf '%d\n' 0xC0A80101 # 3232235777
# Python: ida e volta
python3 -c "import ipaddress as i; print(int(i.ip_address('192.168.1.1')))"
python3 -c "import ipaddress as i; print(i.ip_address(3232235777))"
# PostgreSQL: tipo nativo inet
SELECT '192.168.1.1'::inet - '0.0.0.0'::inet; -- 3232235777
Cuidado com formatos ambíguos
A função inet_aton da libc aceita formatos antigos: ping 3232235777 e ping 0xC0A80101 funcionam no Linux, e octetos com zero à esquerda (010.1.1.1) podem ser lidos como octal (010 = 8). Esse comportamento já causou falhas de segurança em validadores de URL. Em configurações, escreva sempre a notação pontuada sem zeros à esquerda.
Tipo do endereço
Além da conversão, a ferramenta classifica o endereço: privado (RFC 1918), CGNAT (100.64.0.0/10, RFC 6598), loopback (127.0.0.0/8), link-local (169.254.0.0/16, usado quando o DHCP falha), multicast (224.0.0.0/4), reservado ou público. Isso ajuda a interpretar rapidamente um valor encontrado em um log ou em uma tabela de banco de dados.