Получите IP от MAC-адреса. Арп-а не показывая прибор
Я пытаюсь написать пакетный файл, который должен найти динамически назначенный IP-адрес моего телефона Android, когда он подключен к сети (маршрутизатор Tenda WiFi).
поэтому я пытаюсь arp -a
и поиск MAC-адреса моего телефона, чтобы я мог получить его IP-адрес из таблицы.
C:UsersLeeroy>arp -a
Interface: 192.168.0.100 --- 0xb
Internet Address Physical Address Type
192.168.0.1 c8-3a-35-35-f6-68 dynamic
192.168.0.255 ff-ff-ff-ff-ff-ff static
224.0.0.22 01-00-5e-00-00-16 static
224.0.0.251 01-00-5e-00-00-fb static
224.0.0.252 01-00-5e-00-00-fc static
239.255.255.250 01-00-5e-7f-ff-fa static
255.255.255.255 ff-ff-ff-ff-ff-ff static
проблема в том, что он не отображается в таблице! Я пытался!--3--> но он все еще не появляется. Я попытался запросить 192.168.0.100 (IP моего настольного ПК) из браузера телефона, и это, конечно, ставит телефон на радар. Но у меня нет возможности вручную делать это каждый раз, когда я хочу, чтобы он появился в таблице arp.
как я могу получить телефон Android, чтобы появиться в таблице arp (не делая ничего из него, кроме подключения к WiFi)?
решила: решено с помощью ping. Это займет не больше секунды или двух. EDIT 2: обновлено еще несколько. Вот окончательный пакетный файл:
@echo off
:top
:: Loop through arp table entries and look for my Android device's MAC address
for /f "tokens=1-5 skip=3" %%f in ('arp -a') do (if "%%g"=="xx-xx-xx-xx-xx-xx" set ip=%%f)
if "%ip%"=="" (
echo Discovering network...
:: Ping all IPs from 192.168.0.1 to 254
for /L %%N in (1,1,254) do start /b ping -n 1 -w 200 192.168.0.%%N >nul
timeout 1 >nul
goto :top
) else (
echo Mapping network location to drive K
net use k: http://%ip%:8080 /user:francis underwood /persistent:no
if exist k: explorer k:
:: Using FTP (please configure user and pass)
:: explorer ftp://user:pass@%%f:6262
)
)
5 ответов
Я пробовал это, и это работает:
for /L %N in (1,1,254) do start /b ping -n 1 -w 200 192.168.0.%N
если телефон имеет ICMP включен, у вас не должно быть проблем.
Если вы хотите найти IP от MAC, сделайте это
$ arp -n | grep -w -i 'YOUR-MAC' | awk '{print }'
Примечание необходимо заменить ВАШ-MAC, С вашим mac-адресом, держите одинарные кавычки
теперь, если вы хотите найти MAC-адрес с некоторого IP, попробуйте следующее:
$ arp -n | grep -w -i 'YOUR-IP' | awk '{print }'
наслаждайтесь!
этот пакетный код приведет к следующему,
- имя компьютера
- IP-адрес
- MAC-адрес
- Описание Компьютера (Если Доступно)
пожалуйста, сохраните приведенный ниже код в anyname.летучая мышь!--15--> отформатируйте и запустите его. Он выведет результаты в отдельном текстовом файле.
:: This Windows Batch(CMD) File fetches All the Details of the Nearby PC's of Same VLAN (Upto 254 host's).
:: Windows OS (CMD)
:: Author : [M.S.Arun][1]
:: #****************************************************************** Start of Script ********************************************************************#
@echo off
title Remote PC Details Fetching Script(PC Name / IP's / Computer Description)
echo. > %cd%\PC_Details_Temp.txt
echo Remote PC Details Fetching Script (PC Name / IP's / Computer Description) details of the Nearby PC's of Same VLAN.(Upto 254 Hosts)
echo.
set /p input_ip="Please Enter the IP Range(Eg:192.168.1) : " && echo
set /p input_ip_start="Please Enter Start IP Range(Eg:1) : " && echo
set /p input_ip_end="Please Enter End IP Range(Eg:254) : " && echo
echo. >> %cd%\PC_Details_Temp.txt
@echo on
for /l %%i in (%input_ip_start%, 1, %input_ip_end%) do nbtstat -a %input_ip%.%%i | findstr /c:"MAC" /c:"<00>" | findstr /c:"MAC" /c:"UNIQUE" >> %cd%\PC_Details_Temp.txt && echo IP Address = %input_ip%.%%i >> %cd%\PC_Details_Temp.txt
@echo off
echo. > %cd%\PC_Details_Logs.txt
echo. > %cd%\PC_Details_Logs.txt
echo This Batch Script fetches All the Details of the Nearby PC's of Same VLAN.(Starting from 1 to 254 host's) >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
echo PC Host Name: >> %cd%\PC_Details_Logs.txt
find "UNIQUE" PC_Details_Temp.txt >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
echo PC IP Address: >> %cd%\PC_Details_Logs.txt
find "IP" PC_Details_Temp.txt >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
echo PC MAC Address: >> %cd%\PC_Details_Logs.txt
find "MAC" PC_Details_Temp.txt >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
echo PC Seat No's. and Vnet No's: >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
net view /all >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
echo. >> %cd%\PC_Details_Logs.txt
arp -a >> %cd%\PC_Details_Logs.txt
:: del %cd%\PC_Details_Temp.txt
echo.
echo Completed Successfully..!
echo.
pause
:: #****************************************************************** End of Script ********************************************************************#
М. С. Аруна ответ близок к лучшим. У меня была эта проблема для получения IP-адреса некоторых виртуальных машин, для которых все, что у меня было, это MAC-адрес. Много ответов, таких как M. S. Aruns, по всему stackoverflow и в других местах, но никто не объясняет их и не объясняет решение правильно (IMHO).
Я попробовал технику pinging всей подсети, а затем выполните команду arp. Проблема была в том, что мой IP-диапазон имел 60k + возможный IP-адрес и после сканирования всех из них (что было не так просто и действительно уродливо с командой start) таблица arp была действительно малонаселенной... Кстати, это заняло около 30 секунд, даже при попытке "начать пинг". В конце концов я понял, что arp, будучи таблицей кэша, периодически сбрасывает себя, поэтому этот метод редко удавался.
решение состоит в том, чтобы пинговать всю подсеть, но после каждого пинга выполните команду arp, чтобы увидеть, соответствует ли IP-адрес вашему MAC-адресу, что гарантирует, что вы не потеряете информацию из-за характера кэша таблиц arp. Чтобы сделать это правильно, я реализовал это на Java; метод isReachable () действительно чище, и на моем экране нет подсказок cmd, появляющихся повсюду. Кроме того, 60K + диапазон сканирования IPs занимает до 10 секунд с использованием потоков Java. Я думаю, что это более безопасный способ, чем пакетный сценарий...
посмотреть метод threadedScan () здесь который принимает массив IPs и ищет MAC-адрес.
надеюсь, это поможет ;)