Получение неизвестного IP-адреса с известного MAC-адреса с помощью ARP?

Я работаю на платформе Windows (Win7), и у меня есть сценарий, в котором я знаю MAC-адреса устройств, но их IP-адреса выбираются динамически при загрузке.

Я хочу написать пакетный скрипт, который пингует эти конкретные устройства, чтобы убедиться, что они живы. В сети есть много других устройств, которые я не хочу пинговать, просто набор из 10 конкретных MAC-адресов, с которых я хочу получить IP-адрес, а затем пинговать только их. Все они находятся в адресной схеме 10.1.(1-255).(1-255)

Насколько я знаю, я могу пропинговать весь спектр адресов, а затем

arp -a > arp.txt

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

Interface: 192.168.2.27 --- 0xb
  Internet Address      Physical Address      Type
  192.168.2.1           00-1f-90-c0-25-fd     dynamic   
  192.168.2.3           00-00-aa-a1-d3-78     dynamic   
  192.168.2.16          ac-72-89-a7-7e-98     dynamic   
  192.168.2.17          78-45-c4-2f-71-0b     dynamic   
  192.168.2.18          68-b5-99-8e-1c-35     dynamic   
  192.168.2.24          b8-ac-6f-30-00-34     dynamic   
  192.168.2.26          00-90-a9-6f-e0-be     dynamic   

Мой вопрос: как я могу (с помощью пакетного сценария или другого автоматизированного метода) найти строку интересующего меня MAC-адреса и поместить IP-адрес в переменную, которую я затем могу использовать.

В UNIX я могу grep, но в Windows я в недоумении.

Заранее благодарю за любую помощь.


person eumoria    schedule 02.04.2014    source источник
comment
Установите Cygwin и сделайте это уже знакомым вам способом Unix?   -  person Brian Knoblauch    schedule 02.04.2014
comment
findstr может работать на вас...?   -  person Joachim Isaksson    schedule 02.04.2014
comment
@rpax, type эквивалентен cat, find и findstr эквивалентен grep.   -  person Drew Chapin    schedule 02.04.2014
comment
@druciferre спасибо! Я перепутал команду с другой   -  person rpax    schedule 03.04.2014
comment
@BrianKnoblauch Я не могу изменить систему, над которой я работаю, таким образом. Я могу запустить переносимый exe-файл, если это необходимо, но установка Cygwin, к сожалению, невозможна :(   -  person eumoria    schedule 03.04.2014


Ответы (2)


Направьте вывод в find и используйте цикл for.

for /f "tokens=1,2,3 delims= " %%i in ('arp -a ^| find "00-1f-90-c0-25-fd"') do (
    set ip=%%i
    set mac=%%j
)

Вы можете немного изменить это, чтобы создать пакетный скрипт, который будет пинговать, вводя MAC-адрес следующим образом pingbymac.bat 00-1f-90-c0-25-fd

@for /f "tokens=1,2,3 delims= " %%i in ('arp -a ^| find "%~1"') do (
    ping %%i 
)
person Drew Chapin    schedule 02.04.2014
comment
Вы можете использовать %~1, который удалит все окружающие кавычки, если они существуют, в противном случае он будет действовать так же, как %1. Не по теме, но это позволяет использовать такую ​​конструкцию, как "%~1", в любом сравнении, обрабатывать термины в кавычках или без кавычек и всегда возвращать термин в кавычках. - person foxidrive; 03.04.2014

чтобы найти строку:

arp -a |find "78-45-c4-2f-71-0b"

Чтобы найти только IP-адрес:

for /f %i in ('arp -a ^|find "2c-27-d7-ef-f8-77"') do echo %i

(напишите %%i вместо %i, если используете его в пакетном файле)

person Stephan    schedule 02.04.2014