Получаем ip-адрес из requests (python)

Когда мы получаем какую-либо информацию о домене, в числе прочих параметров мы узнаем его ip-адрес. И получить его с помощью python не составляет большого труда. Однако давайте рассмотрим, как, не используя прямое обращение к сокету получить ip-адрес непосредственно из запроса.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Зачастую, чтобы получить ip-адрес мы используем socket. И в случае, когда нам требуется выполнение только данной операции этого вполне достаточно.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Но можно поступить несколько иначе, особенно если мы уже получаем какие-либо данные с сервера. Хотя бы те же заголовки. Давайте на примере посмотрим, как реализовать получение доступа к необработанному объекту сокета.

Установка необходимых библиотек

В данном случае нам понадобиться библиотека requests. Для ее установки пишем в терминале:

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Импорт библиотек в скрипт. Создание заголовков для запроса

После того, как установлены необходимые библиотеки, нам их нужно импортировать в скрипт. В данном случае, так как мы установили библиотеку requests, импортируем ее.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

После этого создадим словарь с заголовками содержащими «User-Agent» и «Accept». Их мы будем передавать в запрос в качестве параметра, чтобы изменить стандартные заголовки отправляемые python.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Получаем заголовки и ip-адрес

Создадим функцию get_domain_info(domain: str) -> (dict, bool), которая на входе будет получать домен, а возвращать заголовки отправленные сервером, а также ip-адрес домена.
Выполним запрос на получение заголовков, куда передадим адрес домена, заголовки. Укажем свойство allow_redirects = True. Это сделано для того, чтобы производилась переадресация. То есть, в данном случае мы делаем следующее: так как мы не знаем точного адреса сайта, доменное имя которого передано в функцию, поступим как браузер. Для начала пойдем по протоколу http. Если на сервере включена переадресация, то мы будем автоматически переадресованы на нужный адрес. Также, stream=True. Это необходимо для получения ip-адреса из запроса.

Обработаем исключение raise_for_status(), чтобы отсекать ненужные статус-коды. В случае же, когда код 200, получим ip и порт, которые возвращаются в кортеже при выполнении следующего кода: res.raw._connection.sock.getpeername(). Важно то, что эти данные необходимо получить в самом начале, до обработки остальных данных запроса, то есть в первую очередь. И уже после получим частично содержимое из заголовков отправленных сервером. Вернем пользователю словарь из полученных данных. В случае же неудачи или неверного статус-кода, вернем из функции False.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Ну и создадим функцию main, где и будем запрашивать у пользователя домен, отправлять его в функцию для получения информации и выводить на печать полученные в виде словаря данные.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Здесь я не проверяю полученную информацию, так как данный код служит примером. Если вы попробуете получить ip-адрес с помощью socket, результат, зачастую, будет одинаковым. Однако, если вы увидите, что адреса различаются, то не считайте это ошибкой. Я проверял специально данные, получая информацию от DNS. Тут дело в том, что на одном домене может быть несколько NS-серверов. И в этом случае возвращается значение ближайшего. Ну или свободного. В данном случае механизм для меня пока еще не совсем понятен. Главное, что и тот, и тот адреса являются правильными.

Полный код скрипта

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост
Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Протестируем написанный код и получим заголовки и ip-адрес для домена python.org.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Результат работы скрипта

Как видим, скрипт отработал правильно и вернул ip-адрес, а также информацию из полученных заголовков.

А на этом, пожалуй, все.

Спасибо за внимание. Надеюсь, данная информация будет вам полезна!

Подписывайся на наши телеграм каналы! У нас много полезного!

Код скрипта можно забрать тут!

Life-Hack [Жизнь-Взлом]/Хакинг

239 постов2.7K подписчиков

Добавить пост

Правила сообщества

Просьба уважать друг друга.