Skip to article frontmatterSkip to article content

le problème

Une adresse IP v4 se présente sous la forme d’une chaine contenant 4 octets (de 0 a 255 donc) en décimal séparés par des .

# exemples

IP_1 = "192.168.0.9"
IP_2 = "138.96.19.1"
from ipsplit import ip_v0, ip_v1

v0

On vous demande d’écrire une fonction qui transforme cette donnée (une chaine donc) en une liste de 4 entiers

# remarquez bien l'absence de quotes (') dans le résultat
ip_v0(IP_1)
[192, 168, 0, 9]
# doit retourner True
ip_v0(IP_1) == [192, 168, 0, 9]
True
# doit retourner True
ip_v0(IP_2) == [138, 96, 19, 1]
True

v1

Même analyse, mais le retour est un entier dans l’espace [0..2321][0..2^{32}-1]

Si j’appelle b0b_0, b1b_1, b2b_2, b3b_3 les 4 valeurs retournées par ip_v0, le résultat ici sera obtenu avec la formule

I=b0.224+b1216+b228+b3I = b_0.2^{24} + b_1*2^{16} + b_2*2^8 + b_3

# doit retourner True
ip_v1(IP_1) == 0xc0a80009
True
# doit retourner True
ip_v1(IP_2) == 0x8a601301
True

astuce

Comment faire ces calculs facilement de manière interactive ?

# les différents morceaux de ip_v0 valent ceci
hex(192), hex(168), hex(0), hex(9)
('0xc0', '0xa8', '0x0', '0x9')
# ça veut dire que le résultat final doit être ceci
0xc0a80009
3232235529

solution