Obtenir des informations sur l'adresse IP avec Python

Table des matières
Python En tant que langage de programmation, il est très puissant, il nous permet de réaliser des actions et d'obtenir des résultats très importants lors de la manipulation des différentes caractéristiques de notre équipement, ce que nous pouvons réaliser grâce au Adresses IP, ports et sockets. Chacune nous permet d'atteindre un point différent et tout aussi important au sein de la structure du réseau.
L'un des environnements où Python s'est renforcé dans le développement de programmes pour le réseau, car grâce à ses classes de gestion des sockets, nous pouvons utiliser la structure du réseau à notre avantage, cette structure peut être locale ou via l'Internet, ce qui nous donne une grande polyvalence et puissance dans les programmes que nous pouvons réaliser.
La bibliothèque de socketsC'est le premier arrêt que nous devons faire, cette bibliothèque apporte des fonctionnalités basées sur cours et en instances, ce qui signifie que nous pouvons utiliser certaines choses sans créer d'objets.
Cela peut ne pas faire beaucoup de différence pour nous, cependant la possibilité de travailler sans instances ouvre des possibilités telles que la création de scripts plus courts et nous permettant d'utiliser des outils puissants sans ajouter de complexité supplémentaire à notre code.
Ce premier exercice est très intéressant, car à partir de la console de commande de notre système, nous pourrons obtenir des informations de notre propre équipement en utilisant Python et quelques lignes de code.
ExigencesComme exigence, nous devons avoir installé l'interprète de Python dans notre machine pour pouvoir exécuter les exemples que nous allons montrer dans ce tutoriel.
Le code que nous avons écrit s'exécute sur le version 2.7 de Python donc certaines modifications peuvent être nécessaires si une version différente est utilisée. Un outil qui peut nous aider avec les problèmes de compatibilité de version est Virtualenv qui nous permet d'exécuter différentes versions de Python dans des installations indépendantes sans avoir besoin de configurations complexes pour le faire.
Tout d'abord, nous allons ouvrir notre console de commande et nous allons entrer dans le Borne interactive PythonPour ce faire, si nous avons correctement installé le langage, nous n'avons qu'à placer le mot python et nous y aurons accès :

Cette console est très utile pour tester les instructions comme nous le verrons dans l'exemple ci-dessous, cependant pour les utilisations où nous devons conserver le code que nous créons, ce n'est peut-être pas la meilleure alternative, comme nous le verrons plus loin dans le tutoriel.
Nous devons d'abord importer notre bibliothèque, pour cela nous utiliserons la commande suivante :
socket d'importation

Ensuite, nous pouvons commencer à collecter les informations que nous voulons, pour cela, nous n'avons qu'à savoir ce que nous recherchons, par exemple pour obtenir le nom de notre équipe, nous devons simplement écrire ce qui suit :
nom_ordinateur = socket.gethostname ()

Ensuite, nous pouvons imprimer la variable à l'écran pour voir son contenu, pour cela nous appelons simplement la méthode imprimer:
print "Le nom de l'ordinateur est :% s"% nom_ordinateur

Cela devrait nous donner un résultat comme le suivant dans notre borne interactive :

Comme nous avons pu le voir, il est assez facile de gérer la bibliothèque prise et opérations depuis la console Python, nous pouvons maintenant passer au point suivant et c'est d'obtenir l'adresse IP à la fois, car nous n'avons qu'à faire quelque chose de similaire, seulement que nous allons utiliser la variable avec le nom de l'ordinateur que nous avons initialement capturé et nous allons procéder comme suit :
host_address = socket.gethostbyname (host_name)

Ceci fait, nous imprimons la variable précédente :
print "L'IP est :% s"% computer_address

Voyons à quoi cela ressemble dans notre terminal :

Comme nous pouvons le voir, nous avons obtenu des informations extrêmement utiles sans trop d'efforts, mais ce n'est rien comparé à ce que nous pouvons faire.
Ce qui précède est assez pratique, mais il n'est pas très utile dans sa présentation, car nous ne pouvons pas y accéder fréquemment, mais nous aurions besoin de le saisir ligne par ligne, pour éviter ce problème, nous allons créer un vrai programme qui nous donne le informations que nous savons jusqu'à présent obtenir.
Pour cela, nous aurons besoin d'un éditeur de texte brut, nous recommandons SublimeText 2 et un emplacement où nous pouvons héberger notre programme et qui est à portée de notre installation de Python avec leurs autorisations correspondantes.
Pour parvenir à une amélioration nous allons créer une fonction qui nous permet d'appeler nos instructions de manière récurrente sans avoir à écrire tout le code à chaque fois, puis dans notre nouveau fichier que nous appellerons team_information.py nous allons placer le contenu suivant :
 #! / usr / bin / env Python import socket def get computer_info (): nom_ordinateur = socket.gethostname () adresse_ordinateur = socket.gethostbyname (nom_ordinateur) print "le nom de l'ordinateur est :% s"% nom_ordinateur print "L'adresse IP est : % s "% computer_address if __name__ == '__main__' : get_team_info () 

Il est très important que nous respections les tabulations et les indentations du code car c'est la seule façon dont Python peut reconnaître les changements de bloc, si nous utilisons Texte sublime Nous n'aurons pas à nous inquiéter puisqu'il nous permet de vérifier visuellement les indentations de notre code :

Maintenant dans notre console de commande système et sans entrer le de Python Nous pouvons appeler notre fichier et nous verrons le résultat, pour cela nous exécutons nom de fichier python.py comme on peut le voir sur l'image suivante :

Depuis que nous avons vu certaines bases du fonctionnement de la bibliothèque prisePrenons cela à un nouveau niveau. Sans avoir besoin d'utiliser de nouvelles instructions, nous allons maintenant obtenir l'adresse d'un ordinateur distant, cela peut être très important pour collecter des informations pour toute validation que nous souhaitons faire.
Dans ce cas nous allons modifier un peu notre programme précédent, dans un nouveau fichier maintenant appelé informations_distantes.py nous allons placer les éléments suivants :
 #!/usr/bin/env Python import socket def get_remote_computer_info (): remote_computer = 'www.google.com' try: print "L'ordinateur distant est :% s"% remote_computer print "L'adresse IP est :% s"% socket.gethostbyname (remote_host) sauf socket.error, err_msg: print "% s:% s"% (remote_host, err_msg) if __name__ == '__main__': get_remote_host_info () 

Ce que nous avons fait, c'est simplement indiquer le nom d'un hôte distantComme nous n'avons rien à prouver, nous pouvons utiliser un site Internet connu pour en obtenir des informations, dans cet exemple nous utiliserons l'adresse de Google, dans ce cas le nom de notre équipe sera URL et en utilisant la même méthode gethostbyname () nous aurons l'information.
Nous avons également ajouté un gestionnaire d'erreurs au cas où nous rejetterions l'adresse que nous avons placée et connaissions ainsi les causes, enfin lorsque nous l'exécuterons dans notre console, nous obtiendrons ce qui suit :

Si nous voulons faire des programmes qui fonctionnent sous des protocoles réseau, il est fort probable que nous devions utiliser les différents formats dans lesquels une adresse IP peut être exprimée, tout cela bien sûr en fonction de la commodité que nous voyons.
Formats populairesIl existe deux formats très populaires pour les adresses IP, le premier est inet_aton () qui est une version compressée de l'IP et ce qui suit est inet_ntoa () qui est le contraire et est une version non packagée de l'IP.
Chacun a ses utilisations dans les programmes, cependant ce n'est pas le sujet principal de ce tutoriel, la seule chose supplémentaire que nous pouvons indiquer est que ces formats et leurs fonctions ne s'appliquent qu'aux IPv4, au lieu de IPv6 d'autres s'appliquent.
Nous allons construire un nouveau programme qui nous permet de faire cette conversion :
 #! / usr / bin / env Python import socket de binascii import hexlify def format_ip_address (): remote_host_a = socket.gethostbyname ('www.twitter.com') remote_host_b = socket.gethostbyname ('www.facebook.com') pour dir_ip dans [remote_host_a, remote_host_b] :packed_ip = socket.inet_aton (dir_ip) no_packed_ip = socket.inet_ntoa (packed_ip) print "IP Address:% s => Packed:% s, Not Packed:% s"% (dir_ip, hexlipify (packed_ip ) ), unpacked_ip) si __name__ == '__main__': format_ip_address () 

Ici, nous recommençons notre programme en important la bibliothèque prise, puis nous importons une bibliothèque appelée hexlifier qui nous permet d'établir une conversion de formats hexadécimaux, afin qu'ils soient lisibles, nous allons l'utiliser pour pouvoir décrypter les adresses IP. Pour rendre cela plus intéressant, nous avons placé deux ordinateurs distants à partir desquels nous allons obtenir les adresses IP et avec un pour boucle nous allons parcourir les deux, au sein de l'itération, nous pouvons ensuite effectuer les conversions avec les formats d'adresse IPv4 que nous avons obtenu.
Enfin nous faisons une impression de chacun, pour cela nous nous sommes appuyés sur les méthodes inet_aton () et inet_ntoa () à la fois de la bibliothèque de sockets, ce qui est important de se rappeler qu'elle est basée sur les classes et non sur les instances.
Voyons à quoi tout cela ressemble lorsque nous exécutons le fichier précédent dans notre console de commande :

Avec cet exemple, nous avons mélangé toutes les astuces que nous avions vues précédemment, de l'obtention des informations à partir d'un ordinateur distant, à la construction d'une fonction qui nous permet d'obtenir les informations sans avoir à tout écrire dans la console interactive de Python.
ImportantUne recommandation importante est que nous devrions utiliser la documentation lorsque nous avons des questions et grâce à la grande communauté de Python Sur Internet, nous pouvons pratiquement trouver une solution à tout doute ou problème auquel nous sommes confrontés.
Avec cela, nous terminons ce tutoriel, c'est juste une entrée à ce qui est la programmation pour les réseaux avec PythonCependant, il est assez utile de savoir qu'à partir de nos programmes, nous pouvons manipuler des informations à la fois de nos ordinateurs et d'ordinateurs distants, ceci sans avoir à faire des inclusions supplémentaires à partir de bibliothèques ou de plusieurs lignes de code pour l'obtenir.Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave