IP-Adresse aus Hostname ermitteln
Python Socket-Modul zum Abrufen der IP-Adresse aus dem Hostnamen
Das Python Socket-Modul gethostbyname()-Funktion akzeptiert einen Hostnamen als Argument und gibt die IP-Adresse im String-Format zurück.
Hier ist ein einfaches Beispiel im Python-Interpreter, um die IP-Adresse einiger Websites herauszufinden.
# 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'
>>>
Hinweis: Wenn die Website hinter einem Load-Balancer liegt oder in der Cloud arbeitet, erhalten Sie möglicherweise ein anderes Ergebnis bei der IP-Adresssuche.
Python-Skript um IP-Adresse aus Hostname ermitteln
Lassen Sie uns ein Beispiel betrachten, bei dem wir den Benutzer bitten, eine Website-Adresse einzugeben und dann deren IP-Adresse auszudrucken.
import socket
hostname = input("Please enter website address:\n")
# IP lookup from hostname
print(f'The {hostname} IP Address is {socket.gethostbyname(hostname)}')
Hier ist ein weiteres Beispiel, um den Hostnamen als Befehlszeilenargument an das Skript zu übergeben. Das Skript wird die IP-Adresse finden und ausdrucken.
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)}')
Output:
# python3.7 ip_address.py facebook.com
The facebook.com IP Address is 157.240.23.35
IP-Adresse aus Hostname ermitteln – Fehlerszenarien mit socket.gethostbyname()
Wenn der Hostname nicht in eine gültige IP-Adresse aufgelöst wird, wird socket.gaierror ausgelöst. Wir können diesen Fehler in unserem Programm mit einem try-except-Block abfangen.
Hier ist das aktualisierte Skript mit Ausnahmebehandlung für ungültige Hostnamen.
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}')
Output:
# python3.7 ip_address.py jasjdkks.com
Invalid hostname, error raised is [Errno 8] nodename nor servname provided, or not known