Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties, fonctions)
Contexte de la mise en œuvre de l'activité : en classe, en présence de l'enseignant
Présentation
Lorsque l'internaute entre dans l'URL une adresse symbolique de type www.pearltrees.com, sa machine se connecte d'abord à un serveur de nom de domaine pour obtenir l'adresse IP correspondante. Ensuite, les routeurs permettent d'acheminer la requête, de réseaux en réseaux vers le serveur hébergeant le site recherché.
Nous allons voir comment un programme peut retrouver une adresse IP à partir d’une adresse symbolique, mais aussi l'identifiant réseau et le numéro d’hôte à partir de l'adresse IP.
Liens utiles
https://www.monsite.fr
https://www.monsite.frPréparation
Pour convertir une chaîne de caractères en une liste en utilisant l'espace comme séparateur, on peut utiliser la méthode split :
chaine = "toto le héros"
chaine.split(" ")renvoie ['toto', 'le', 'héros']
Unelistepermet de stocker des éléments que l'on peut rappeler à l'aide de leurs indices :
liste = ['a', 'b', 'c']
liste[0]renvoie a
liste[1]renvoie b
joinpermet de convertir une liste de caractères en chaîne de caractères :
''.join(une_liste)renvoie abcd
Undictionnairestocke également des éléments mais sous forme de couple clé/valeur. Il faut utiliser la clé et non un indice pour obtenir la valeur :
fruits = {'pomme':'rouge', 'poire':'jaune', 'banane':'jaune', 'abricot':'orange'}
fruits['banane'] renvoie jaune
La valeur peut être une liste :
fruits = {'pomme':['rouge', 'verte', 'jaune'], 'poire':'jaune', 'banane':'jaune', 'abricot':'orange'}
fruits['pomme'] renvoie ['rouge', 'verte', 'jaune']
On peut connaître le nombre d'éléments dans une liste ou un dictionnaire avec lafonction len:
len(fruits) renvoie 4
len(fruits['pomme']) renvoie 3
On peut convertir un entier en une chaîne de caractères avecstret inversement avecint:
str(100)renvoie '100'
int('100')renvoie 100
On inverse un entier (ou une chaîne représentant un entier) sur huit bits avec :
256+~int('255')renvoie 0
Traitement des données avec Python
Nous avons modélisé la table du DNS par un dictionnaire. Le programme demande à l'utilisateur d'entrer une adresse ip ou un nom de domaine. Si c'est un nom de domaine, on retrouve l'adresse ip correspondante dans le dictionnaire. À partir de l'adresse ip, on donne l'adresse réseau (net id) et l'adresse de la machine (host id).
1. Complétez la fonctionest_ipqui vérifie si la chaîne de caractères passée en paramètre est une adresse IPV4 et renvoie vrai ou faux.
def est_ipv4(ad):
ad = ad.split('.')
if ...................................:
return False
for a in ad:
if .............................................:
return ............
return .............
dns = {"www.qwant.fr":"217.70.184.56", "www.fdj.fr":"194.4.208.20",
"www.monlycee.fr":"213.186.33.19"}
route_vers = input("ping ")
if not est_ipv4(route_vers):
route_vers = dns.get(route_vers)
print("La route pour aller vers ", route_vers)
2. Complétez la fonctionnet_idqui prend en paramètre l'adresse IP et le masque de sous réseau et qui renvoie l'adresse réseau.
def net_id(adresse, masque):
netid = [0]*4
ad = adresse.split('.')
ma = ..................................
for i in range(4):
netid[i] = ..............................................
netid = '.'.join(netid)
return ......................
masque = "255.255.0.0"
netid = net_id(route_vers, masque)
print("Adresse réseau : ", netid)
3. Réalisez la fonction host_id qui renvoie l'adresse de la machine.
hostid = host_id(route_vers, masque)
print("Adresse machine : ", hostid)
Liens utiles
https://www.qwant.fr
https://www.qwant.frhttps://www.fdj.fr
https://www.fdj.frhttps://www.monlycee.fr
https://www.monlycee.fr