Ищем занятые адреса


В некоторых сетях все устройства закрыты внутренним фаэрволом (например, если они смотрят в Интернет) и не отвечают на пинги. Сделать инвентаризацию занятых и свободных адресов в такой сети простым пингом не получится. Самый простой способ найти занятые адреса некоторой сети – посмотреть ARP таблицу после выполнения пинга командой arp –a на устройстве включенном в эту же сеть (на втором уровне). Но пинговать вручную много адресов долго и неудобно, а ставить везде сетевой сканер не всегда возможно.

Быстро решить задачу из среды Powershell можно так:


34..45 | % {ping -w 100 -n 1 "73.83.93.$_"}; arp -a

где 73.83.93 это сеть, а 34..45 диапазон тестируемых адресов в ней.

Все это прекрасно за одним исключением: обработку вывода всё равно придётся делать вручную.

Можно ли распарсить вывод команды arp.exe ? Если использовать выражения RegEx, то получится довольно громоздко. В Интернете можно найти готовые примеры.

Не так давно появилась новая возможность. Эта возможность включена в Powershel 5, который входит в состав Windows Management Framework 5.0 (Ссылка на Preview). Это версия которая входит в состав Windows 10.

Речь о командлете ConvertFrom-String. Командлет сложный в теории и простой в применении. Документация Technet очень скудная, хотя содержит ссылку на теорию FlashExtract. Более полезно почитать статью в блоге ConvertFrom-String: Example-based text parsing.

Применительно к нашей задаче имеем:


$otherTemplate = @'

Interface: 172.16.0.235 --- 0x8
  Internet Address      Physical Address      Type
  {IP*:172.16.0.1} {MAC:00-00-0c-07-ac-c8} {Type:dynamic}
  {IP*:224.0.0.22} {MAC:01-00-5e-00-00-16} {Type:static}
  {IP*:172.16.0.255} {MAC:ff-ff-ff-ff-ff-ff} {Type:static}
'@

$b= arp -a | ConvertFrom-String -TemplateContent $otherTemplate

$b | ft -AutoSize

На выходе имеем в переменной $b массив объектов со заполнеными свойствами IP,MAC,Type, и можем гибко манипулировать этой информацией.

Заключение

Если вы ещё не установили WMF 5, то самое время это сделать и использовать новые возможности Powershell 5, в частности новый чрезвычайно мощный командлет ConvertFrom-String для обработки сложноформатированной текстовой информации.

Реклама

комментария 2

  1. Первый вариант не правильный, лучше вот так:

    34..45 | % {ping -w 100 -n 1 «73.83.93.$_»} | out-null | arp -a

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: