Como converter um valor hexadecimal em um endereço IP "padrão"?

1

Como faço para converter manualmente um valor hexadecimal em um endereço IP sem um conversor on-line?

Por exemplo, o que é 80D00297 na notação de ponto de IP normal?

    
por Fredo Martinez 23.07.2016 / 09:01

2 respostas

2

Usando sed e bash

$ printf '%d.%d.%d.%d\n' $(echo 80D00297 | sed 's/../0x& /g')
128.208.2.151

Como funciona:

  • sed é usado para reformatar o número:

    $ echo 80D00297 | sed 's/../0x& /g'
    0x80 0xD0 0x02 0x97 
    
  • O formato %d de printf é usado para converter os números hexadecimais em decimais.

Usando o GNU awk

$ echo 80D00297 | gawk --non-decimal-data '{for (i=1;i<=NF;i++) printf "%d%s","0x"$i,(i==NF?"\n":".")}' FPAT='..' 
128.208.2.151

Isso usa FPAT='..' para dividir a entrada em dois campos de caractere. Em seguida, percorremos cada campo, colocamos um 0x na frente dele e o alimentamos para printf com o formato %d , de modo que o número hexadecimal seja convertido em decimal.

Uma parte aparentemente complexa do acima é a declaração ternária (i==NF?"\n":".") . Esta declaração retorna um caractere de nova linha se estivermos no último campo, i==NF . Para outros valores de i , retorna um período, . . Dessa forma, os números são separados por um período, mas o número final é seguido por um caractere de nova linha.

    
por 23.07.2016 / 09:13
1

Supondo que você queira convertê-lo em uma representação de notação de string ou pontilhada

A primeira coisa que você precisa saber é se o endereço está na ordem de bytes da rede ou na ordem de bytes do host. A ordem de bytes de rede é big-endian, enquanto os computadores baseados em intel são little-endian. Você pode converter um para outro usando uma função chamada ntohl, que basicamente pega cada byte (2 caracteres hexadecimais) do endereço, e os inverte, então 80d00297 se tornaria 9702d080

Depois, você pega cada byte e converte em decimal. Você pode usar uma calculadora para isso.

80 => 128
d0 => 208
02 => 2
97 => 151

então, se esse endereço estiver na ordem de byte do host, o endereço é 128.208.2.151

    
por 23.07.2016 / 09:08

Tags