background preloader

Traitement des données avec Python

17 mai 2023

Traitement des données avec Python

Nous allons déterminer la route pour aller de la machine source à la destination. La source est forcément l'un des deux ordinateurs portables. La destination peut être entrée avec la commande ping suivie d'une adresse IP ou d'un nom de domaine.

Soit le programme :

def est_ipv4(ad):
    # Permet de savoir si l'adresse ad est au format IPV4
    ad = ad.split('.')
    if len(ad) != 4:
        return False
    for a in ad:
        if not (0 <= int(a) <= 255):
            return False
    return True

def net_id(adresse, masque):
    # Renvoie l'adresse du réseau
    netid = [0]*4
    ad = adresse.split('.')
    ma = masque.split('.')
    for i in range(4):
        netid[i] = str(int(ad[i])&int(ma[i]))
    netid = '.'.join(netid)
    return netid

def host_id(adresse, masque):
    # Renvoie l'adresse de  la machine
    hostid = [0]*4
    ad = adresse.split('.')
    ma = masque.split('.')
    for i in range(4):
        hostid[i] = str(int(ad[i])&(256+~int(ma[i])))
    hostid = '.'.join(hostid)
    return hostid

# Pour les PC et serveurs
identifiants = {"172.16.100.10":"Portable 1", "172.16.100.12":"Portable 2",
                "172.16.100.2":"Serveur DNS", "213.186.33.19":"Serveur web Lycée",
                "217.70.184.56":"Serveur web Qwant", "194.4.208.20":"Serveur web fdj"}
# Serveur de nom de domaine
dns = {"www.qwant.fr":"217.70.184.56", "www.fdj.fr":"194.4.208.20",
       "www.monlycee.fr":"213.186.33.19"}
# Commutateur (switch)
table_ARP = {"172.16.100.10":"5D:4C:07:CD:C2:62", "172.16.100.12":"86:F7:BD:F0:1F:00",
             "172.16.100.2":"F3:43:84:E0:47:D0"}
# Routeurs
table_R1 = {"172.16.0.0":[None, "172.16.100.1"],
            "213.186.0.0":[None, "213.186.33.1"],
            "217.70.0.0":["192.168.0.1", "192.168.0.2"],
            "194.4.0.0":["192.168.0.1", "192.168.0.2"]}
table_R2 = {"172.16.0.0":["192.168.0.2", "192.168.0.1"],
            "213.186.0.0":["192.168.0.2", "192.168.0.1"],
            "217.70.0.0":[None, "217.70.184.1"],
            "194.4.0.0":[None, "194.4.208.1"]}

source = input("Votre adresse IP : ")

destination = input("ping ")


1. Complétez ce programme afin de conserver l'adresse IP destination ou de remplacer le nom de domaine par son adresse IP. On donne :

# On vérifie si adresse IPV4 ou nom de domaine

if not est_ipv4(..................................):

    destination = ............................................

print("La route pour aller vers ", destination)

source = identifiants.get(......................)

print("source : ", source)

print("\t--> Switch")


Si la destination est directement connectée au switch, la route est déterminée, sinon il faut aller vers le routeur R1. De la même manière, on détermine s'il faut aller vers le routeur R2 ou s'arrêter à R1.

2. Complétez le programme.

# L'adresse est-elle dans le sous-réseau local ?

if table_ARP.get(..........................) == None:

    print("\t--> ...............................")

    masque = "255.255.0.0"

    netid = net_id(.........................................)

    # L'adresse est-elle dans le réseau local ?

    if table_R1.get(netid)[0] != .....................:

        print("\t--> ...........................")

destination = ......................................

print("destination : ", destination)