Как узнать кто открыл файл по сети python

Обновлено: 04.07.2024

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

Информация об открытых портах.

Информация об услугах, работающих на каждом порту.

Информация об ОС и MAC-адресе целевого хоста.

Информация об открытых портах.

Информация об услугах, работающих на каждом порту.

Информация об ОС и MAC-адресе целевого хоста.

Сканирование портов похоже на вора, который хочет войти в дом, проверяя каждую дверь и окно, чтобы увидеть, какие из них открыты. Как обсуждалось ранее, набор протоколов TCP / IP, используемый для связи через Интернет, состоит из двух протоколов, а именно TCP и UDP. Оба протокола имеют от 0 до 65535 портов. Поскольку всегда желательно закрыть ненужные порты нашей системы, следовательно, по сути, существует более 65000 дверей (портов) для блокировки. Эти 65535 портов можно разделить на следующие три диапазона:

Системные или общеизвестные порты: от 0 до 1023

Динамические или частные порты: все> 49151

Системные или общеизвестные порты: от 0 до 1023

Динамические или частные порты: все> 49151

Сканер портов с использованием сокета

Когда мы запускаем вышеуказанный скрипт, он запрашивает имя хоста, вы можете указать любое имя хоста, например, имя любого веб-сайта, но будьте осторожны, поскольку сканирование портов может рассматриваться как преступление или рассматриваться как преступление. Мы никогда не должны запускать сканер портов для какого-либо веб-сайта или IP-адреса без явного письменного разрешения владельца сервера или компьютера, на который вы ориентируетесь. Сканирование портов сродни походу в чей-то дом и проверке их дверей и окон. Вот почему рекомендуется использовать сканер портов на локальном хосте или на вашем собственном веб-сайте (если есть).

Выход

Приведенный выше скрипт генерирует следующий вывод:

Сканер портов, использующий ICMP (живые хосты в сети)

Сканер портов с использованием ICMP

import os import platform from datetime import datetime net = input ( "Enter the Network Address: " ) net1 = net . split ( '.' ) a = '.' net2 = net1 [ 0 ] + a + net1 [ 1 ] + a + net1 [ 2 ] + a st1 = int ( input ( "Enter the Starting Number: " )) en1 = int ( input ( "Enter the Last Number: " )) en1 = en1 + 1 oper = platform . system () if ( oper == "Windows" ): ping1 = "ping -n 1 " elif ( oper == "Linux" ): ping1 = "ping -c 1 " else : ping1 = "ping -c 1 " t1 = datetime . now () print ( "Scanning in Progress:" ) for ip in range ( st1 , en1 ): addr = net2 + str ( ip ) comm = ping1 + addr response = os . popen ( comm ) for line in response . readlines (): if ( line . count ( "TTL" )): break if ( line . count ( "TTL" )): print ( addr , "--> Live" ) t2 = datetime . now () total = t2 - t1 print ( "Scanning completed in: " , total )

Приведенный выше скрипт работает в трех частях. Сначала он выбирает диапазон IP-адресов для сканирования с помощью ping, разбивая его на части. Затем следует использование функции, которая выберет команду для сканирования пинга в соответствии с операционной системой, и, наконец, она дает ответ о хосте и времени, затраченном на завершение процесса сканирования.

Выход

Приведенный выше скрипт генерирует следующий вывод:

Приведенный выше вывод не показывает активных портов, потому что брандмауэр включен и параметры входящей ICMP тоже отключены. После изменения этих настроек мы можем получить список активных портов в диапазоне от 1 до 100, приведенный в выходных данных.

Сканер портов, использующий сканирование TCP

На этом этапе система, которая пытается инициировать соединение, запускается с пакета, для которого установлен флаг SYN.

На этом этапе целевая система возвращает пакет с наборами флагов SYN и ACK.

Наконец, инициирующая система вернет пакет в исходную целевую систему с установленным флагом ACK.

Тем не менее, здесь возникает вопрос: если мы можем выполнить сканирование портов с использованием метода эхо-запроса ICMP и ответа (сканер ping-sweep), то зачем нам сканирование TCP? Основная причина этого заключается в том, что если мы отключим функцию ответа ICMP ECHO или используем брандмауэр для пакетов ICMP, то сканер ping-развертки не будет работать, и нам потребуется сканирование TCP.

Приведенный выше скрипт работает в трех частях. Он выбирает диапазон IP-адресов для сканирования с помощью ping-сканирования, разбивая его на части. Затем следует использовать функцию сканирования адреса, которая дополнительно использует сокет. Позже, он дает ответ о хосте и времени, необходимом для завершения процесса сканирования. Результат = с. Оператор connect_ex ((addr, 135)) возвращает индикатор ошибки. Если операция завершается успешно, индикатор ошибки равен 0, в противном случае это значение переменной errno. Здесь мы использовали порт 135; этот сканер работает для системы Windows. Другой порт, который будет работать здесь, это 445 (Microsoft-DSActive Directory) и обычно открыт.

Выход

Приведенный выше скрипт генерирует следующий вывод:

Сканер резьбовых портов для повышения эффективности

В приведенном выше сценарии нам нужно импортировать модуль потоков, который встроен в пакет Python. Мы используем концепцию блокировки потоков, thread_lock = threading.Lock (), чтобы избежать множественной модификации за раз. По сути, threading.Lock () позволяет одному потоку одновременно обращаться к переменной. Следовательно, двойной модификации не происходит.

Позже мы определим одну функцию нитей (), которая будет извлекать работу (порт) из рабочего цикла for. Затем вызывается метод portscan () для подключения к порту и вывода результата. Номер порта передается как параметр. После выполнения задачи вызывается метод q.task_done ().

Теперь после запуска вышеуказанного скрипта мы можем увидеть разницу в скорости сканирования от 50 до 500 портов. Это заняло всего 1.3589999675750732 секунды, что намного меньше 452.3990001678467, времени, которое занимает сканер сокетов портов для сканирования того же количества портов localhost.

Чтобы просто увидеть IP-адрес и другие сетевые настройки, вам нужно перейти в командную строку и запустить команду ipconfig / all. Ситуация — одна из самых распространенных для эникейщиков и удаленных шаманов, но, по крайней мере, ее можно быстро решить. Но если вам нужно собрать более серьезный набор информации о машине, с которой вы теперь будете работать, без автоматизации вам не обойтись. Этим и займемся.

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

Задачи

Да­вай сна­чала обри­суем, что мы вооб­ще пла­ниру­ем делать. Я пла­нирую собирать сле­дующую информа­цию:

  1. IP-адрес.
  2. MAC-адрес.
  3. Имя поль­зовате­ля.
  4. Тип опе­раци­онной сис­темы.
  5. Ско­рость работы сис­темы.
  6. Вре­мя.
  7. Скрин­шот.
  8. Ско­рость интернет‑соеди­нения.
  9. Мо­дель про­цес­сора.

И отправ­лять­ся это все будет пря­миком тебе в телегу через спе­циаль­ный бот.

Инструменты

Сначала рассмотрим, где мы будем писать код. Вы можете писать код в обычном блокноте Windows, но мы будем использовать специальную среду разработки Python — PyCharm. Установка и настройка просты как два рубля: скачайте установщик, запустите его — и нажмите «Далее» при появлении такой кнопки.
Еще нам нужен Python. Буду использовать версию 3.9.0 — уверен, что с ней все работает.

Основа программы

Для отправки данных я решил использовать робота Telegram. Вы можете создать его через BotFather, а затем сохранить токен своего создания. Вы не можете опубликовать его — любой, кто получит этот токен, сможет взять под контроль вашего бота.

Для под­клю­чения к Bot API «телеги» нуж­ны все­го две строч­ки:

Что­бы оце­нить быс­тро­дей­ствие, мож­но написать еще пару строк. Весь даль­нейший код рас­положим меж­ду ними. Опи­сан­ное выше под­клю­чение бота уже впи­сано сюда

Те­перь перей­дем собс­твен­но к сбо­ру дан­ных.

Сбор данных

Я не буду дол­го ходить вок­руг да око­ло и сра­зу нач­ну раз­бирать сек­цию импорта.

Те­перь крат­ко рас­смот­рим, что дела­ет каж­дый модуль. Если какие‑то фун­кции тебе не нуж­ны, выб­роси стро­ку импорта модуля и код, который исполь­зует этот модуль. Все прос­то!

Итак, за работу с ОС и локаль­ными ресур­сами отве­чают эти четыре модуля:

  • getpass нужен для опре­деле­ния информа­ции о поль­зовате­ле;
  • os исполь­зуем для вза­имо­дей­ствия с фун­кци­ями ОС, вро­де вызова внеш­них исполня­емых фай­лов;
  • psutil работа­ет с некото­рыми низ­коуров­невыми сис­темны­ми фун­кци­ями;
  • platform пре­дос­тавит информа­цию об ОС.

Эти­ми модуля­ми реали­зова­ны сетевые вза­имо­дей­ствия:

  • socket — для работы с сокета­ми и получе­ния IP-адре­сов;
  • getnode получа­ет MAC-адрес машины;
  • speedtest замеря­ет харак­терис­тики интернет‑соеди­нения;
  • telebot сде­лает всю рутину по работе с Telegram-ботом.

Слу­жеб­ные при­моч­ки, которые труд­но отнести к катего­риям выше:

  • datetime поз­волит опре­делить вре­мя работы прог­раммы;
  • pyautogui работа­ет с GUI;
  • PIL. Image — для сня­тия скрин­шота.

Пос­ле это­го нам тре­бует­ся узнать основные ста­биль­ные харак­терис­тики сис­темы: IP- и MAC-адре­са, имя поль­зовате­ля и ОС:

Стро­ки кода снаб­жены ком­мента­риями и в пояс­нени­ях не нуж­дают­ся.

Скорость интернет-соединения

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

Часовой пояс и время

Частота процессора

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

Глубокий фингерпринтинг

В этой статье специально не рассказывается, как получить идентификатор жесткого диска или установленный идентификатор Windows GUID — мы не пишем руководство для рекламодателей, а практикуемся в программировании. Однако вы можете легко добавить коллекцию такой информации с помощью утилиты консоли wmic. Его вывод можно проанализировать с помощью скрипта Python, поэтому вам даже не нужно писать дополнительные привязки. На скриншоте показан пример получения серийного номера BIOS.


Скриншот рабочего стола

bot . send_message ( message . chat . id , "[ Error]: Location not found!" )

Тут все тоже мак­сималь­но прос­то, а за собс­твен­но сня­тие скрин­шота отве­чает толь­ко пос­ледняя стро­ка кода. Осталь­ное мы исполь­зуем для кор­рек­тной обра­бот­ки вхо­дящей коман­ды бота.

Запись в файл

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

bot . send_message ( message . chat . id , "[ Error]: Location not found!" )

Отправка данных

Те­перь допол­ним код выше, что­бы он еще и фай­лы отправ­лял.

Сна­чала ука­зыва­ется под­пись к скрин­шоту, потом чита­ем и отправ­ляем фай­лы в виде фото и докумен­та, затем зачища­ем сле­ды и зак­рыва­ем соеди­нение с ботом. Ничего слож­ного!

Ес­тес­твен­но, если нам не нужен, к при­меру, скрин­шот, мы можем вырезать код его отправ­ки, получив такой вари­ант:

Что­бы бот гаран­тирован­но отправ­лял все сооб­щения тебе, ука­жи вмес­то message. chat. id ID чата с собой. Его мож­но узнать через бот GetMyID.

Чтобы не перетаскивать Python и зависимости программы с собой на другой компьютер, давайте объединим все в один исполняемый файл. Это делается с помощью PyInstaller, который устанавливается с помощью простой команды pip install pyinstaller.

Пе­рехо­дим с помощью коман­дной стро­ки в пап­ку с нашей прог­раммой и собира­ем ее коман­дой

Аргумент —onefile заставит PyInstaller упаковать все в один файл. После -i вы должны указать путь к значку исполняемого файла, если хотите его использовать. Если он вам не нужен, просто удалите этот аргумент. Последнее — это путь к файлу с нашим кодом. Если вы не хотите, чтобы консоль появлялась при запуске (например, если владелец компьютера не знает, что вы собираетесь ему помочь: D), измените расширение входного файла с помощью кода на .pyw или укажите параметр -w.

Результат сканирования на VirusTotal

Ре­зуль­тат ска­ниро­вания на VirusTotal

Пол­ный код про­екта я раз­местил на GitHub. Там есть и прог­рамма‑сбор­щик, о которой я рас­ска­жу ниже.

Сборщик с графическим интерфейсом

Для соз­дания GUI сбор­щика нам при­дет­ся работать с биб­лиоте­кой Tkinter, поэто­му преж­де все­го импорти­руем ее и нуж­ные эле­мен­ты:

Пос­ле это­го нуж­но соз­дать окно, которое и будет осно­вой интерфей­са:

Нам нужен толь­ко ввод API-клю­ча для дос­тупа к боту. Дела­ется такой ввод кодом ниже:

Это соз­даст два гра­фичес­ких объ­екта — поле вво­да и под­пись к нему.

В этом интерфей­се не хва­тает кноп­ки для сбор­ки выход­ного фай­ла. Давай соз­дадим ее:

button = Button ( root , text = "Create" , command = clicked , height = 2 , width = 10 )

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

В этом уроке вы сможете создать свой собственный сканер портов на Python, используя библиотеку сокетов.

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

При необходимости необходимо установить модуль colorama для красивой печати:

Простой сканер портов

В этом разделе мы напишем простой сканер портов, просто чтобы замарать руки, давайте начнем с импорта модуля socket:

Примечание: модуль socket уже установлен на вашем компьютере, он встроен в модуль стандартной библиотеки Python, поэтому вам не нужно ничего устанавливать.

Модуль socket позволяет делать операции с сокетами, функции для сетевых задач и т.д. Они широко используются в Интернете, так как они отвечают за любым подключением к любой сети. Любая сетевая коммуникация проходит через сокет, более подробная информация в официальной документации Python.

Давайте определим функцию, которая отвечает за определение того, открыт ли порт:

Функция s.connect((host, port)) пытается подключить сокет к удаленному адресу (хост, порт), она вызовет исключение, когда не сможет подключиться к этому хосту, поэтому мы обернули эту строку кода в блок try-except , поэтому всякий раз, когда возникает исключение, это указывает на то, что порт действительно закрыт, в противном случае он открыт.

Теперь давайте воспользуемся указанной выше функцией и переберем диапазон портов:

Приведенный выше код будет сканировать порты в диапазоне от 1 до 1024, вы можете изменить диапазон на 65535, если хотите, но это займет больше времени.

Когда вы попытаетесь запустить его, вы сразу заметите, что скрипт работает довольно медленно, ну, мы можем избежать этого, если мы установим тайм-аут в 200 миллисекунд или около того (используя метод settimeout(0.2) ). тем не менее, это на самом деле может снизить точность разведки, особенно когда ваша задержка довольно высока. В результате нам нужен лучший способ ускорить это.

Быстрый сканер портов

Теперь давайте перейдем к нашему простому сканеру портов на более высокий уровень. В этом разделе мы напишем поточный сканер портов, который может сканировать 200 или более портов одновременно.

Итак, на этот раз функция ничего не возвращает, мы просто хотим распечатать, открыт ли порт (хотя вы можете это изменить).

Мы использовали класс Queue() из встроенного модуля queue, который поможет нам с использованием портов, две следующие функции предназначены для создания и заполнения очереди номерами портов и использования потоков для их использования:

Обратите внимание, что q.get() будет блокироваться до тех пор, пока в очереди не появится единственный элемент. q.put() помещает один элемент в очередь, а q.join() ожидает завершения всех потоков демона (очистки очереди).

Наконец, давайте сделаем простой парсер аргументов, чтобы мы могли передать диапазон номеров хоста и порта из командной строки:

Результат сканирования портов на своем компьютере

Вот скриншот, когда я пытался сканировать свой компьютер:
Результат сканирования портов на своем компьютере

Заключение

Потрясающе! Он завершил сканирование 5000 портов менее чем за 2 секунды! Вы можете использовать диапазон по умолчанию (от 1 до 65535), и это займет несколько секунд.

Если вы видите, что ваш сканер зависает на одном порту, это признак того, что вам нужно уменьшить количество потоков, если у проверяемого сервера высокий пинг, то следует уменьшить N_THREADS до 100, 50 или даже ниже, попробуйте поэкспериментировать с этим параметром.

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

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

Пожалуйста, проверьте полную версию обоих скриптов здесь.

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

«Сетевому администратору необходимо уметь программировать» — эта фраза часто вызывает возражения у многих сетевиков.

— Зачем? Руками оно надёжнее.
— Зато можно автоматизировать типовые операции.
— И положить кучу устройств, если что-то пойдёт не так?
— Положить кучу устройств можно и руками.

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

Если посмотреть в сторону производителей сетевого оборудования,
то окажется, что та же cisco уже давно предлагает разнообразные варианты для автоматизации работы с сетевым оборудованием: от TCL на IOS до Python на NX-OS и IOS-XR . Называется всё это network automation или network programmability, и у Cisco есть курсы по этому направлению.

И Cisco здесь не одинока: Juniper c PyEZ, HP, Huawei и тд.

Множество инструментов — Netconf, Restconf, Ansible, Puppet и Python, Python, Python. Анализ конкретных инструментов отложим на потом, перейдём к конкретному примеру.

Второй вопрос, который иногда вызывает бурные дискуссии, как правило приводящий к полному непониманию друг друга: «А нужны сетевику сетевые устройства в DNS?».
Оставим подробный анализ позиций участников на потом, сформулируя задачу, которая привела к Python и SNMP. А началось всё с traceroute.

Несмотря на наличие разнообразных систем мониторинга, которые бдят и видят многое, MPLS-TE, который разворачивает трафик причудливым образом, верный ICMP и утилиты traceroute и ping во многих случаях способны дать нужную информацию быстро и сейчас. Но вывод traceroute только ввиде IP адресов в большой сети потребует дополнительных усилий для понимания того, откуда именно пришли пакеты. Например, мы видим, что прямой и обратный трафик от пользователя идёт через разные маршрутизаторы, но по каким именно? Решение очевидно, занести адреса маршрутизаторов в DNS. А для корпоративных сетей, где редко используют unnumbered, ставя на соединители отдельные адреса, в случае занесения адресов интерфейсов в DNS, можно будет быстро понять, через какой интерфейс пакет ICMP вышел с маршрутизатора.

Однако вести вручную базу DNS на большой сети требует очень больших трудозатрат не самого сложного труда. А ведь доменное имя интерфейса будет состоят из названия интерфейса, description интерфейса, hostname маршрутизатора и названия домена. Всё это маршрутизатор несёт в своей конфигурации. Главное это собрать и правильно склеить и привязать к правильному адресу.

Значит эту задачу надо автоматизировать.

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

Вторая мысль, использовать то, что даёт нужные ответы на универсальные запросы к оборудованию разных вендоров. Ответ был очевиден — SNMP. Он, при всех своих особенностях, реализован в ПО любого вендора.

Итак, начнём


Нам понадобятся модули для работы с SNMP, IP адресами, со временем. Но для их установки необходимо поставить pip. Правда, сейчас он идёт в комплекте с python.

pip3 install datetime

pip3 install ipaddress

Попробуем получить с маршрутизатора его hostname. SNMP использует для запросов к хосту OID. На OID хост вернёт информацию, соответствующую этому OID. Хотим получить hostname — нужно запрашивать 1.3.6.1.2.1.1.5.0.

И так первый скрипт, который запрашивает только hostname.


Запускаем и получаем:

Разберём скрипт поподробнее:

Сначала мы импортируем необходимые модули:

1. pysnmp — обеспечивает работу скрипта с хостом по SNMP

2. ipaddress — обеспечивает работу с адресами. Проверка адресов на корректность, проверка на вхождения адреса в адрес сети и тд.

3. datetime- получение текущего времени. В данной задаче нужен для организации логов.

Потом заводим четыре переменных:

1. community
2. адрес хоста
3. порт SNMP
4. значение OID

1. snmp_getcmd
2. snmp_get_next

Первая функция посылает запрос GET указанному хосту, по указанному порту, с указанным comminity и OID.
Вторая функция это генератор snmp_getcmd. Наверное разбивать на две функции было не совсем правильно, но уж так получилось:)

В этом скрипте не хватает некоторых вещей:

1. В скрипт необходимо загрузить ip адреса хостов. Например, из текстового файла. При загрузке необходимо проверить загружаемый адрес на корректность, иначе pysnmp может очень сильно удивиться и скрипт остановится с traceback. Непринципиально, откуда вы будете брать адреса из файла, из базы даных, но вы должны быть уверены, что адреса, которые вы получили — корректные. И так, источник адресов текстовый файл, одна строка — один адрес в десятичной форме.

2. Сетевое оборудование может быть выключено на момент опроса, может быть неправильно настроено, в итоге pysnmp выдаст в этом случае совершенно не то, что мы ждём и при дальнейшей обработке полученной информации получим остановку скрипта с traceback. Нужен обработчик ошибок для нашего взаимодействия по SNMP.

3. Нужен лог файл, в который будут записываться обработанные ошибки.

Загружаем адреса и создаём лог файл


Создадим файл ip.txt


Второй адрес в этом списке не отвечает на snmp. Запустим скрипт и убедимся в необходимости обработчика ошибок для SNMP.

Error ip 12.43.dsds.f4
hostname= MikroTik
Traceback (most recent call last):
File "/snmp/snmp_read3.py", line 77, in print('hostname= ' + sysname)
TypeError: Can't convert 'NoneType' object to str implicitly

Process finished with exit code 1

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

Создаём обработчик ошибок для pysnmp

В функции snmp_get_next уже есть вывод ошибок errorIndication, errorStatus, errorIndex, varBinds. В varBinds выгружаются полученные данные, в переменные, начинающиеся с error, выгружается информация по ошибкам. Это только нужно правильно обработать. Так как в дальнейшем в скрипте будет ещё несколько функций по работе с snmp, имеет смысл обработку ошибок вынести в отдельную функцию.

1. Sysname меньше, чем три символа. Запишем в лог файл, чтобы потом присмотреться по пристальнее.

2. Обнаружим, что некоторые Huawei и Catos отдают на запрос только hostname. Так как отдельно выискивать для них OID совершенно не хочется (не факт, что он вообще есть, может это ошибка ПО), добавим таким хостам domain вручную.

3. Обнаружим, что хосты с неправильным comminity ведут себя по разному, большинство инициирует срабатывание обработчика ошибок, а некоторые почему-то отвечают, что скрипт воспринимает как нормальную ситуацию.


Проверим этот скрипт на том же файле ip.txt

Всё отработало штатно, мы поймали все ошибки, скрипт пропустил хосты с ошибками. Теперь этим скриптом можно собрать hostname cо всех устройств, отвечающих на snmp.

Полный текст скрипта прячу под спойлер.

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

Читайте также: