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?
networking
ip
Fredo Martinez
la source
la source
ping 0x80D00297
=>Pinging 128.208.2.151 with 32 bytes of data:
Réponses:
Utilisation de sed et bash
Comment ça fonctionne:
sed
est utilisé pour reformater le nombre:Le
%d
format deprintf
est utilisé pour convertir les nombres hexadécimaux en nombres décimaux.Utiliser GNU awk
Cela permet
FPAT='..'
de diviser l’entrée en deux champs de caractères. Nous parcourons ensuite chaque champ, plaçons un0x
devant, et le transmettonsprintf
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 dei
, 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.la source
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.
ainsi, si cette adresse est dans l'ordre des octets de l'hôte, l'adresse est 128.208.2.151
la source