Получить информацию об IP-адресе с помощью Python

{title}

Python как язык программирования очень мощный, он позволяет нам выполнять действия и получать очень важные результаты, манипулируя различными характеристиками нашего оборудования, этого можно достичь с помощью IP-адресов, портов и сокетов . Каждый из них позволяет нам достичь другой и одинаково важный момент в структуре сети.
Одной из сред, в которых Python приобрел большую силу, является разработка программ для сети, поскольку благодаря классам управления сокетами мы можем использовать структуру сети в нашу пользу, эта структура может быть локальной или через Интернет. Это дает нам большую гибкость и мощь в программах, которые мы можем выполнять.
Библиотека сокетов

Это первая остановка, которую мы должны сделать, эта библиотека предоставляет функциональные возможности, основанные на классах и экземплярах, что означает, что мы можем использовать некоторые вещи без создания объектов.
Это может не иметь большого значения для нас, однако возможность работать без экземпляров открывает некоторые возможности, такие как создание более коротких сценариев и позволяет нам использовать мощные инструменты, не добавляя дополнительной сложности нашему коду.

Получить имя и IP-адрес нашей команды


Это первое упражнение очень интересно, поскольку из командной консоли нашей системы мы можем получить информацию от нашей собственной команды, используя Python и несколько строк кода.
требования

В качестве требования мы должны установить интерпретатор Python на нашей машине, чтобы иметь возможность выполнять примеры, которые мы покажем в этом руководстве.
Код, который мы написали, работает в Python версии 2.7, поэтому, возможно, придется внести некоторые изменения, если используется другая версия. Virtualenv - это инструмент, который может помочь нам с проблемами совместимости версий, который позволяет нам запускать разные версии Python в независимых установках без необходимости сложных конфигураций.
Прежде всего, мы собираемся открыть нашу командную консоль, и мы собираемся войти в интерактивный терминал Python, для этого, если мы правильно установили язык, нам просто нужно поместить слово python, и у нас будет доступ к нему:

{title}


Эта консоль очень полезна для тестирования инструкций, как мы увидим в приведенном ниже примере, однако для применений, в которых нам нужно сохранить исполняемый код, она может оказаться не лучшей альтернативой, как мы увидим позже в этом руководстве.
Сначала мы должны импортировать нашу библиотеку, для этого мы будем использовать следующую команду:
 гнездо для импорта 

Затем мы можем начать собирать информацию, которую хотим, для этого нам просто нужно знать, что мы ищем, например, чтобы получить название нашей команды, мы должны просто написать следующее:
 имя_компьютера = socket.gethostname () 

Затем мы можем напечатать переменную на экране, чтобы увидеть ее содержимое, для этого мы просто вызываем метод print :
 напечатать «Название команды:% s»% team_name 

Это должно дать нам результат, подобный следующему в нашем интерактивном терминале:

{title}


Как мы могли видеть, управлять библиотекой сокетов и операциями с консоли Python довольно просто, теперь мы можем перейти к следующему пункту и получить IP-адрес сразу, потому что нам нужно только сделать что-то подобное, только мы будем использовать переменную с именем команды, которую мы первоначально захватили, и мы сделаем следующее:
 адрес_компьютера = socket.gethostbyname (имя_компьютера) 

Как только это будет сделано, мы печатаем предыдущую переменную:
 напечатать «IP is:% s»% device_address 

Давайте посмотрим, как это выглядит в нашем терминале:

{title}


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

Повторение программы


Вышеприведенное довольно практично, но не очень полезно в его представлении, поскольку мы не можем получить к нему частый доступ, но нам нужно вводить построчно, чтобы избежать этой проблемы, мы создадим реальную программу, которая дает нам информацию, которая До сих пор мы знаем, как получить.
Для этого нам понадобится простой текстовый редактор, мы рекомендуем SublimeText 2 и место, где мы можем разместить нашу программу, и это находится в пределах досягаемости нашей установки Python с соответствующими разрешениями.
Чтобы добиться улучшения, мы создадим функцию, которая позволит нам вызывать наши инструкции на регулярной основе без необходимости каждый раз писать весь код, а затем в нашем новом файле мы будем вызывать computer_info.py и разместим следующий контент:
 #! / usr / bin / env Python для импорта сокета def get_info_computer (): имя_компьютера = socket.gethostname () computer_address = socket.gethostbyname (computer_name) print "имя компьютера:% s"% print_name "IP-адрес: % s "% computer_address, если __name__ == '__main__': get_info_computer () 

Очень важно, чтобы мы уважали табуляции и отступы кода, так как это единственный способ, с помощью которого Python может распознавать изменения блоков, если мы используем Sublime Text, нам не нужно беспокоиться, так как это позволяет нам визуально проверять отступы нашего кода. :

$config[ads_text5] not found

{title}


Теперь в нашей системной командной консоли и без входа в консоль Python мы можем вызвать наш файл, и мы увидим результат, для этого мы выполним python filename.py, как мы можем видеть на следующем рисунке:

{title}

Получить информацию с удаленного компьютера


Поскольку мы рассмотрели некоторые основы работы библиотеки сокетов, давайте перейдем на новый уровень. Без использования новых инструкций мы теперь получим адрес удаленного компьютера, это может быть очень важно для сбора информации для любой проверки, которую мы хотим выполнить.
В этом случае мы немного изменим нашу предыдущую программу, в новый файл, который теперь называется remote_information.py, мы поместим следующее:
 #! / usr / bin / env Сокет импорта Python def get_info_computer_computer (): remote_computer = 'www.google.com' try: print "Удаленный компьютер:% s"% remote_computer print "IP-адрес:% s"% socket.gethostbyname (remote_computer), кроме socket.error, err_msg: print "% s:% s"% (remote_computer, err_msg), если __name__ == '__main__': get_remote_info_computer () 

Мы просто указали имя удаленного хоста, поскольку нам нечего доказать, что мы можем использовать какой-либо известный веб-сайт для получения информации с него. В этом примере мы будем использовать адрес Google, в этом случае именем нашей команды будет URL и используя тот же метод gethostbyname (), мы получим информацию.
Мы также добавили обработчик ошибок на случай, если мы отклоним адрес, который мы разместили, и таким образом узнаем причины, и, наконец, при выполнении этого в нашей консоли мы получим следующее:

$config[ads_text5] not found

{title}

Преобразовать формат IP-адреса


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

Существует два очень популярных формата для IP-адресов: первый - inet_aton (), который представляет собой упакованную версию IP, а следующий - inet_ntoa (), которая является противоположной и представляет собой неупакованную версию IP.
Каждый из них имеет свое применение в программах, однако это не главная тема этого урока, единственное, что мы можем указать, это то, что эти форматы и их функции применимы только для IPv4, однако для IPv6 есть и другие, которые применяются.
Мы собираемся создать новую программу, которая позволяет нам делать это преобразование:

 #! / usr / bin / env Импорт сокетов Python из binascii import hexlify def format_address_ip (): remote_computer_to = socket.gethostbyname ('www.twitter.com') remote_computer_b = socket.gethostbyname ('www.facebook.com') для dir_ip в [remote_ equipment_, remote_ equipment]: packaged_ip = socket.inet_aton (dir_ip) no_packaged_ip = socket.inet_ntoa (packaged_ip) print "IP-адрес:% s => Упаковано:% s, распаковано:% s"% (dir_ip, hexlify (packaged_ip) ), no_packaged_ip) if __name__ == '__main__': format_address_ip () 

Здесь мы снова запускаем нашу программу, импортируя библиотеку сокетов, затем импортируем библиотеку с именем hexlify, которая позволяет нам устанавливать преобразование в шестнадцатеричные форматы, чтобы их можно было читать, это будет использоваться для расшифровки IP-адресов. Чтобы сделать это более интересным, мы разместили два удаленных компьютера, с которых мы собираемся получить IP-адреса, и с циклом, который мы собираемся перебрать через оба, в рамках итерации, когда мы можем затем выполнить преобразования с форматами адресов IPv4, которые у нас есть получен.
Наконец, мы производим впечатление на каждого из них, для этого мы использовали методы inet_aton () и inet_ntoa () библиотеки сокетов, что важно помнить, что она основана на классах, а не на экземплярах.
Давайте посмотрим, как это выглядит, когда мы запускаем предыдущий файл в нашей командной консоли:

$config[ads_text6] not found

{title}


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

Важной рекомендацией является то, что мы должны использовать документацию, когда у нас есть какие-либо сомнения, и благодаря большому сообществу Python в Интернете мы можем получить практически решение любых вопросов или проблем, с которыми мы сталкиваемся.
На этом мы завершаем этот урок, это всего лишь вступление в программирование сетей на Python, однако очень полезно знать, что из наших программ мы можем манипулировать информацией как с нашего оборудования, так и с удаленного оборудования, без необходимости необходимость делать дополнительные включения библиотек или несколько строк кода для его получения.