Простым способом получения MAC – и IP-адресов в локальной подсети является отправка пакетов ICMP (Internet Control Message Protocol) на каждый из компьютеров с помощью команды ping, после чего можно проверить содержимое кэша ARP.

Однако отправка таких пакетов на каждый сетевой узел часто занимает слишком много времени, а записи в таблице ARP хранятся лишь две минуты. Альтернативный вариант заключается в отправке пакетов ICMP на широковещательный адрес локальной подсети, что приведет к отправке пакетов на все компьютеры подсети. (Отправка пакетов всей сети невозможна, поскольку система может непосредственно взаимодействовать только с компьютерами в своей подсети. Все остальные запросы отправляются с помощью шлюза, поэтому в таблице ARP необходимо добавить запись с адресом шлюза.)

Что такое широковещательный адрес? Его легко подсчитать, если маска подсети имеет вид 255.255.255.0, 255.255.0.0 и т.д. (длина маски, кратная 8-ми битам). Например, если IP-адрес равен 134.189.23.42, а маска подсети имеет вид 255.255.0.0, то широковещательный адрес получит значение 134.189.255.255, где поверх значения 255 из маски подсети копируется соответствующий октет IP-адреса, а вместо 0 в маске подсети указывается значение 255. Таким образом, сохраняется идентификатор сети. Если маска подсети не имеет простого формата 255.255, понадобится IP-адрес и маска подсети:

  • для каждого бита со значением 1 в маске подсети скопируйте соответствующий бит из IP-адреса;
  • каждому биту со значением 0 в маске подсети присвойте значение 1.

Для получения MAC-адреса, соответствующего IP-адресу, выполните две следующие команды:

ping <широковещательный адрес> arp - a

Вот и все. Будет получен список IP-адресов и соответствующих им MAC-адресов (можно добавить параметр > имя файла, чтобы сохранить полученный список в файл, например, arp – a > <имя файла>). Это упражнение имеет смысл повторить в различных подсетях одной организации.

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

REM arpping.bat ping - n 1 - 1 1 %1.%2 arp - a %1.%2

Затем командный файл вызывается следующим образом:

for /1 %i in (1,1,254) do arpring 160.82.220 %i

В этом случае команда генерирует список соответствия MAC – и IP-адресов для адресного диапазона от 160.82.220.1 до 160.82.220.254. И в этот раз полученный список можно записать в файл для дальнейшего поиска нужных адресов, например:

REM test.bat for /1 %%i in (1,1,254) do arpring 160.82.220 %%i

Обратите внимание на использование двойного символа процента (%%). Файл test.bat можно запускать следующим образом:

test.bat > file.txt

Затем в файле проводится поиск ключевого слова (в данном случае слова dynamic):

findstr dynamic file.txt 160.82.220.1 00-00-0c-60-8b-41 dynamic 160.82.220.9 00-60-97-4b-bf-4c dynamic 160.82.220.13 00-10-4b-49-94-e1 dynamic 160.82.220.17 00-80-5f-d8-a4-8b dynamic 160.82.220.22 00-a0-d1-02-a4-cf dynamic 160.82.220.25 00-60-08-75-0d-7a dynamic 160.82.220.26 00-10-4b-44-e4-73 dynamic 160.82.220.33 00-10-4b-44-d6-33 dynamic 160.82.220.34 00-10-4b-4e-67-6a dynamic 160.82.220.35 00-60-97-4b-c4-53 dynamic 160.82.220.39 00-10-4b-44-eb-ae dynamic 160.82.220.41 00-10-4b-49-7b-f7 dynamic 160.82.220.42 00-00-f8-21-7a-7f dynamic 160.82.220.43 00-00-20-88-82-57 dynamic 160.82.220.221 08-80-5f-88-d0-55 dynamic

Последние несколько этапов можно объединить в один, поэтому создадим как и раньше файл ARPPING.BAT, содержащий следующую последовательность команд:

for /1 %i in (1,1,254) do arpring 160.82.220 %i | findstr dynamic C:\>arpping.bat 10.129.210 1 | findstr dynamic 10.129.210.1 00-08-c7-d3-24-f5 dynamic C:\>arpping.bat 10.129.210 2 | findstr dynamic 10.129.210.2 00-08-c7-df-81-60 dynamic C:\>arpping.bat 10.129.210 3 | findstr dynamic 10.129.210.3 00-08-5f-9b-ea-93 dynamic C:\>arpping.bat 10.129.210 4 | findstr dynamic 10.129.210.4 00-80-5f-9b-36-ea dynamic C:\>arpping.bat 10.129.210 5 | findstr dynamic 10.129.210.5 00-04-ac-37-78-92 dynamic C:\>arpping.bat 10.129.210 6 | findstr dynamic

Обратите внимание на использование одинарного символа процента (%), поскольку команда не вызывается из командного файла и автоматически перечисляет только найденные записи. Для поиска необходимых ключевых слов можно использовать и другие комбинации команд.