Поиск по сайту:

Python – получить IP-адрес из имени хоста


Модуль сокета Python можно использовать для получения IP-адреса по имени хоста.

Модуль сокета является частью основных библиотек Python, поэтому нам не нужно устанавливать его отдельно.

Модуль сокета Python для получения IP-адреса от имени хоста

Функция gethostbyname() модуля сокета Python принимает аргумент имени хоста и возвращает IP-адрес в строковом формате.

Вот простой пример в интерпретаторе Python, чтобы узнать IP-адрес некоторых веб-сайтов.

# 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'
>>> 

Примечание. Если веб-сайт находится за балансировщиком нагрузки или работает в облаке, вы можете получить другой результат поиска IP-адреса.

Например, попробуйте запустить приведенную выше команду для facebook.com. Если вы не находитесь в том же месте, что и я (Индия), есть вероятность, что вы получите другой IP-адрес в качестве вывода.

Скрипт Python для определения IP-адреса веб-сайта

Давайте рассмотрим пример, в котором мы просим пользователя ввести адрес веб-сайта, а затем распечатать его IP-адрес.

import socket

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

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

Вот еще один пример передачи имени хоста сценарию в качестве аргумента командной строки. Скрипт найдет IP-адрес и распечатает его.

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)}')

Выход:

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

Сценарии ошибок с socket.gethostbyname()

Если имя хоста не преобразуется в допустимый IP-адрес, возникает ошибка socket.gaierror. Мы можем поймать эту ошибку в нашей программе, используя блок try-except.

Вот обновленный скрипт с обработкой исключений для недопустимого имени хоста.

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}')

Выход:

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

Ссылка: документация по API модуля сокетов