Recherche de site Web

Python - Obtenir l'adresse IP à partir d'un nom d'hôte


Le module de socket Python peut être utilisé pour obtenir l'adresse IP à partir d'un nom d'hôte.

Le module socket fait partie des bibliothèques de base de Python, donc nous n'avons pas besoin de l'installer séparément.

Module Socket Python pour obtenir l'adresse IP à partir du nom d'hôte

La fonction gethostbyname() du module socket de Python accepte un argument de nom d'hôte et renvoie l'adresse IP sous forme de chaîne.

Voici un exemple simple dans l'interpréteur Python pour découvrir l'adresse IP de certains sites web.

python3.7
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import socket
>>> socket.gethostbyname('journaldev.com')
'45.79.77.230'
>>> socket.gethostbyname('google.com')
'172.217.166.110'
>>> 

Remarque: Si le site web est derrière un équilibreur de charge ou fonctionne dans le cloud, vous pourriez obtenir un résultat différent pour la recherche de l'adresse IP.

Par exemple, essayez d'exécuter la commande ci-dessus pour google.com ou facebook.com. Si vous n'êtes pas au même endroit que moi (Inde), il y a de fortes chances que vous obteniez une adresse IP différente en sortie.

Script Python pour trouver l'adresse IP d'un site Web

Regardons un exemple où nous demandons à l'utilisateur d'entrer une adresse de site Web, puis nous imprimons son adresse IP.

import socket

hostname = input("Please enter website address:\n")

IP lookup from hostname
print(f'The {hostname} IP Address is {socket.gethostbyname(hostname)}')

Obtenir l'adresse IP à partir du nom d'hôte avec Python

Voici un autre exemple pour passer le nom d'hôte en tant qu'argument de ligne de commande au script. Le script trouvera l'adresse IP et l'affichera.

import socket
import sys

no error handling is done here, excuse me for that
hostname = sys.argv[1]

IP lookup from hostname
print(f'The {hostname} IP Address is {socket.gethostbyname(hostname)}')

Sortie:

python3.7 ip_address.py facebook.com
The facebook.com IP Address is 157.240.23.35

Scénarios d'erreur avec socket.gethostbyname()

Si le nom d'hôte ne se résout pas en une adresse IP valide, socket.gaierror est levée. Nous pouvons attraper cette erreur dans notre programme en utilisant un bloc try-except.

Voici le script mis à jour avec la gestion des exceptions pour un nom d'hôte invalide.

import socket
import sys

hostname = sys.argv[1]

IP lookup from hostname
try:
    ip = socket.gethostbyname(hostname)
    print(f'The {hostname} IP Address is {ip}')
except socket.gaierror as e:
    print(f'Invalid hostname, error raised is {e}')

Sortie :

python3.7 ip_address.py jasjdkks.com               
Invalid hostname, error raised is [Errno 8] nodename nor servname provided, or not known
#

Référence : Documentation de l'API du module Socket