Comment convertir manuellement une valeur hexadécimale en adresse IP sans convertisseur en ligne?
Par exemple, qu'est-ce que 80D00297 en notation par points IP normale?
Comment convertir manuellement une valeur hexadécimale en adresse IP sans convertisseur en ligne?
Par exemple, qu'est-ce que 80D00297 en notation par points IP normale?
Réponses:
$ printf '%d.%d.%d.%d\n' $(echo 80D00297 | sed 's/../0x& /g')
128.208.2.151
Comment ça fonctionne:
sed
est utilisé pour reformater le nombre:
$ echo 80D00297 | sed 's/../0x& /g'
0x80 0xD0 0x02 0x97
Le %d
format de printf
est utilisé pour convertir les nombres hexadécimaux en nombres décimaux.
$ 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
Cela permet FPAT='..'
de diviser l’entrée en deux champs de caractères. Nous parcourons ensuite chaque champ, plaçons un 0x
devant, et le transmettons printf
avec le %d
format de sorte que le nombre hexadécimal soit converti en décimal.
Une partie apparemment complexe de ce qui précède est la déclaration ternaire (i==NF?"\n":".")
. Cette déclaration renvoie un caractère de nouvelle ligne si nous sommes sur le dernier champ, i==NF
. Pour les autres valeurs de i
, renvoie une période .
,. De cette façon, les nombres sont séparés par un point mais le dernier nombre est suivi d'un caractère de nouvelle ligne.
sed 's/../0x&\n/g' | tac
.
En supposant que vous vouliez dire le convertir en chaîne ou en représentation en pointillé
La première chose que vous devez savoir est de savoir si l'adresse est dans l'ordre des octets du réseau ou dans l'ordre des octets de l'hôte. L'ordre des octets du réseau est big-endian, alors que les ordinateurs basés sur intel sont little-endian. Vous pouvez convertir l'un en l'autre en utilisant une fonction appelée ntohl, qui prend essentiellement chaque octet (2 caractères hexadécimaux) de l'adresse et les inverse, de sorte que 80d00297 deviendrait 9702d080.
Ensuite, prenez chaque octet et convertissez-le en décimal. Vous pouvez utiliser une calculatrice pour cela.
80 => 128
d0 => 208
02 => 2
97 => 151
ainsi, si cette adresse est dans l'ordre des octets de l'hôte, l'adresse est 128.208.2.151
ping 0x80D00297
=>Pinging 128.208.2.151 with 32 bytes of data: