PowerShell — Mac Address Vendor Database IEEE

Долгое время у меня не получалось написать этот скрипт так, чтоб самому было приятно пользоваться, предыдущая попытка называлась Resolve-MacAddress и была вполне рабочая, но там были неприятные моменты:

Перед первым использованием с сайта стандартов скачивалась база, что могло напугать неподготовленного пользователя, и скрипт не поддерживал конвейер, т.к. в нем было много много разного функционала, который вызывался через разные параметры. Нужно было как-то разнести обновление/импорт базы и саму функцию поиска мака в базе. Так появился модуль MacAddressVendorDatabaseIEEE, который включает в себя функции (Update-MacAddressDatabase, Import-MacAddressDatabase, Get-MacAddressVendor) и саму базу.

Скрипт сохраняет базу в формате csv, а при импорте создает хэш-таблицу и сохраняет в глобальную переменную $MacAddressDatabase. Это расходует немного памяти, но необходимо для оптимизации быстродействия.

Быстродействие довольно неплохое, скрипт совершает 7000 операций примерно за 3 сек.

PS> $Neighbors = Get-NetNeighbor -IPAddress 192.168*
PS> $Neighbors.Count
7
PS>
PS>
PS> Measure-Command {1..1000 | % {$Neighbors | Get-MacAddressVendor}}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 2
Milliseconds      : 855
Ticks             : 28552767
TotalDays         : 3,30471840277778E-05
TotalHours        : 0,000793132416666667
TotalMinutes      : 0,047587945
TotalSeconds      : 2,8552767
TotalMilliseconds : 2855,2767



PS>

С применением параметра PassThru скрипт работает конечно же в 2 раза медленнее, что очевидно, ведь он не просто выводит найденную в базе строку а добавляет к объекту новое свойство.

Без PassThru:

PS> Get-NetNeighbor -IPAddress 192.168.0.10 | Get-MacAddressVendor
D-Link International
PS>

С PassThru:

PS> Get-NetNeighbor -IPAddress 192.168.0.10 | Get-MacAddressVendor -PassThru | Select-Object IPAddress,LinkLayerAddress,Vendor

IPAddress   LinkLayerAddress  Vendor
---------   ----------------  ------
192.168.0.10 C4-12-F5-23-AC-26 D-Link International


PS>

Еще вариант использования

PS> Get-DhcpServerv4Scope | Get-DhcpServerv4Lease | Get-MacAddressVendor -PassThru | Select-Object -Property IPAddress,ClientId,HostName,Vendor

IPAddress    ClientId          HostName       Vendor
---------    --------          --------       ------
192.168.0.101 00-1f-ce-22-e0-5f QTECH          QTECH LLC
192.168.0.102 54-e4-3a-80-2a-a7 iPhone-El      Apple, Inc.
192.168.0.103 3c-07-71-c9-02-93 tv0ecb1067a39c Sony Corporation
192.168.0.104 d8-d4-3c-aa-ae-50 tvcd83d3ff9299 Sony Corporation


PS>

В базе содержится более 20000 записей, но имеет смысл периодически обновлять ее с помощью командлета Update-MacAddressDatabase без параметров.

Модуль выложен в репозиторий, поэтому в PowerShell5 устанавливается с помощью команды

Install-Package MacAddressVendorDatabaseIEEE  -Force

Обновляйтесь до PowerShell5 и пользуйтесь репозиторием.
Ссылка на мой репозиторий powershellgallery/saw-friendship

Реклама

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

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

Логотип WordPress.com

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

Google+ photo

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

Фотография Twitter

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

Фотография Facebook

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

Connecting to %s