Хорошо, ребята, это не обычный вопрос, на который легко ответить ...
Мне нужно получить MAC-адрес с машины под управлением Windows (от XP до Server2012). У меня есть следующий вариант, который я могу использовать:
1) getmac - Хорошо в целом, а также формат, в котором он возвращает MAC-адрес, меня устраивает, но в прошлом это вызывало у меня проблемы.
2) WMIC - в целом тоже нормально, но также вызывал у меня проблемы в
прошлое и, кроме того, отстает в производительности (особенно на машинах с низкими характеристиками).
3) ipconfing - Традиционный способ получения его из вывода команд. Может работать, но разбор вывода может быть обременительным, если существует более одного интерфейса.
Итак, вопрос следующий. Какая лучшая альтернатива всему вышеперечисленному для получения MAC-адреса машины. Имейте в виду, что я буду вызывать любую утилиту через сценарий оболочки (что бы это ни добавляло к уравнению), и что я развертываю ее в нескольких разных выпусках Windows (от Professional до встроенных POS).
О Powershell, очевидно, не может быть и речи, поскольку он не поддерживается XP. Также причина, по которой я хотел бы избежать WMIC, заключается в 1) тот факт, что я столкнулся с плохой установкой (вызывая серьезные проблемы) и 2) потому, что некоторые выпуски Windows (например, встроенный XP) не включают его.
Я попытался получить его с помощью таблицы ARP, но, насколько я видел, в нем не будет указан MAC-адрес локального компьютера.
Приветствуются любые полезные подсказки или идеи.
Вы можете использовать VBScript. Кодекс о http://www.robvanderwoude.com/vbstech_network_mac.php могут быть изменены для получения необходимой информации.
Код VBScript:
intCount = 0 strMAC = "" ' We're interested in MAC addresses of physical adapters only strQuery = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID > ''" Set objWMIService = GetObject( "winmgmts://./root/CIMV2" ) Set colItems = objWMIService.ExecQuery( strQuery, "WQL", 48 ) For Each objItem In colItems If InStr( strMAC, objItem.MACAddress ) = 0 Then strMAC = strMAC & "," & objItem.MACAddress intCount = intCount + 1 End If Next ' Remove leading comma If intCount > 0 Then strMAC = Mid( strMAC, 2 ) Select Case intCount Case 0 WScript.Echo "No MAC Addresses were found" Case 1 WScript.Echo "MAC Address: " & strMAC Case Else WScript.Echo "MAC Addresses: " & strMAC End Select
Требования: Версия Windows: Windows NT 4 SP4, 2000, XP, Server 2003 или Vista
Сеть: TCP / IP
Клиентское программное обеспечение: WMI CORE 1.5 для Windows NT 4
Скриптовый движок: любой
Вкратце: работает в Windows NT 4 SP4 (с WMI CORE 1.5), Windows 2000 или новее. Не работает в Windows 95, 98 или ME.
В Linux есть отличная утилита под названием arp-scan
который может сканировать вашу сеть и генерировать таблицу с MAC-адресами и соответствующими им IP-адресами. К сожалению, он не входит в комплект Knoppix. Я не знаю о других живых дистрибутивах.
Это может немного выходить за рамки того, что вы можете сделать, но это полное доказательство и простота, если у вас есть IP-адреса всех машин.
Перейдите к базовому коммутатору / маршрутизатору или любому устройству, имеющему интерфейс в той же подсети (ах). Если у вас нет доступа к маршрутизатору / коммутатору, вы можете сделать это из окна Windows в той же подсети.
Отправьте эхо-запрос на все IP-адреса или выполните проверку связи, затем распечатайте таблицу arp. На этом этапе все, что вам нужно сделать, это скопировать и вставить это в свой любимый текстовый манипулятор (notepadd ++, excel, linux и т. Д.) И отфильтровать строки, которые вам не нужны.
Не нужно полагаться на надоедливые командлеты Windows, которые не всегда совместимы или случайно выходят из строя, и этот метод будет работать для всех устройств, а не только для Windows.
1. откройте
CMD /a
2. Тип
nbstat -A
за которым следует {IP-адрес машины}3. "Enter"
4.Output = Информация NET-BIOS машины, включая MAC ID
Вы также можете использовать -a
переключатель и machine name
(если известно)