Skip to content

A partir d'une adresse IP et de son CIDR sortir 9 infos

License

Notifications You must be signed in to change notification settings

Teo-Gojkovic/Calcule-IP.py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A propos

Calcule de 9 informations à partir d'un IP acompagné de son CIDR (exemple : 192.168.1.5/21)

Version programme

Fonctionnement

Le programme peut s'exécuter comme tout ficher et apparaîtra sur la console par défaut de votre appareil.

Le code est fait à partir d'une fonction def calculer_informations_reseau(ip_str) : et à l'intérieur, J'ai mis tout notre code pour simplifier les futures mises à jour.

Vu que le programme utilise la bibliothèque ipaddress il faut convertir l'input qu'on fera pour avoir un objet de classe ipaddress.IPV4Network

ip = ipaddress.IPv4Network(ip_str, strict=False)

Ensuite, il faudra déterminer la classe IP qui se fait avec des if else :

# Classe de l'adresse IP
classe_ip = 'A' if ip.is_private and ip.prefixlen == 8 else \
            'B' if ip.is_private and ip.prefixlen == 16 else \
            'C' if ip.is_private and ip.prefixlen == 24 else \
            'A' if 1 <= ip.network_address.packed[0] <= 126 else \
            'B' if 128 <= ip.network_address.packed[0] <= 191 else \
            'C' if 192 <= ip.network_address.packed[0] <= 223 else 'D ou E'

Une fois qu'on a déterminé la classe, il faudra trouver le masque/ wildcard /adresse réseau/broadcast/1er hôte/dernier hôte et nombre d'hôtes par sous réseau :

masque = ip.netmask                             # Masque de sous-réseau 

wildcard = ip.hostmask                          # Wildcard

adresse_reseau = ip.network_address             # Adresse réseau

adresse_broadcast = ip.broadcast_address        # Adresse de diffusion (broadcast)

premiere_ip = ip.network_address + 1            # Première adresse IP affectable du sous-réseau

derniere_ip = ip.broadcast_address - 1          # Dernière adresse IP affectable du sous-réseau

nombre_hotes = ip.num_addresses - 2             # Nombre d'hôtes

On a de la chance la bibliothèque s'occupe de tout, il ne reste que le nombre de sous réseau qui est calculé à partir de nombre de bit '1' dans l'octet incomplet donc il fallait le trouver :

# ______________________________ - Nombre de sous-réseaux - ______________________________

masque_binaire = bin(int(ip.netmask))[2:].zfill(32)                                         # Obtenir le masque de sous-réseau en format binaire

longueur_prefixe_sous_reseau = ip.prefixlen                                                 # Longueur du préfixe de sous-réseau

index_octet_incomplet = longueur_prefixe_sous_reseau // 8                                   # Calcul de l'index de l'octet incomplet

octet_incomplet = masque_binaire[index_octet_incomplet * 8:(index_octet_incomplet + 1) * 8] # Extraire l'octet incomplet du masque

nombre_de_bits_1 = octet_incomplet.count('1')                                               # Compter le nombre de bits '1'

nombre_sous_reseaux = 2 ** nombre_de_bits_1 - 2                                             # Calcule pour le nombre de sous réseaux

Ensuite se ne sont que des print pour afficher nos valeur qui sont espacer d'un quart de seconde pour être plus agréable pour l'oeil.

J'ai mis tout dans try pour s'assurer que l'adresse mise est une IPV4 avec son CIDR.

A la fin du code il y a un simple input pour la fonction que j'ai crée avant et j'ai ajouter input("Appuyez sur Entrée pour quitter...") pour éviter que si c'est executer comme un programme que la fenetre du CMD se ferme a la fin des calculs.

Documentation

Auteur

Teo GOJKOVIC

About

A partir d'une adresse IP et de son CIDR sortir 9 infos

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages