Как узнать MAC-адрес машин в сети?
Мне нужно найти машины, доступные только с установленным BIOS (без операционной системы).
И мне нужно найти MAC-адреса работающих машин.
Вам нужно будет получить доступ к информации, доступной на ваших управляемых коммутаторах. Если у вас неуправляемая сеть, я не вижу способа сделать это.
Предполагается, что целевые компьютеры способны Wake On LAN (WoL). В этом случае устанавливается связь с сервером (ищите мигающий светодиодный индикатор связи), и сетевая карта прослушивает трансляции WoL. AFAIK, карта ни на что не отвечает в этом состоянии. Если WoL отсутствует, скорее всего, карта выключена (нет светодиода связи) и вообще не будет работать.
Если машины не включены, это невозможно.
Если они включены, я бы предположил, что это также невозможно, поскольку вам нужен минимальный сетевой стек, чтобы хотя бы отвечать на такие вещи, как запросы ARP и т. Д., Которые не работают без установленной ОС.
Что может сработать (я не знаю и не могу сейчас проверить), так это то, что сетевая карта и коммутатор обмениваются данными, когда сетевая карта подключена или включена, и коммутатор таким образом узнает MAC-адрес. В этом случае вам понадобится управляемый коммутатор и запросите у него подключенные MAC-адреса.
Ты можешь использовать Nmap чтобы выполнить очень быстрое сканирование ARP, используя следующий синтаксис.
nmap -sn -PR -oX nmap.xml 192.168.1.0/24
При этом используется ARP ping (только запросы ARP, без ICMP, UDP или TCP, без сканирования портов) для сканирования указанного диапазона IP-адресов и записи ответов IP-адреса / MAC-адреса / имени хоста в файл XML (nmap.xml).
Я написал PowerShell скрипт, изменяющий XML-файл и выводящий CSV файл. Это также отфильтровывает пониженных хостов Я считаю, что это проще использовать в Excel, чем в файле XML. Вот сценарий, если кому интересно.
# Define nmap input file
$NmapXMLFile = ".\nmap.xml"
# Initialize object array
$HostItems = @()
# Initialize index
$x = 0
# Load XML
[xml]$NmapXML = Get-Content $NmapXMLFile
# Loop through XML
ForEach ($HostNode in $NmapXML.nmaprun.host) {
# Check host status
If ($HostNode.status.state -eq "up") {
# Create host object
$HostObj = "" | Select-Object ID, Hostname, 'IP Address', 'MAC Address', Vendor
# Store ID and increment index
$HostObj.ID = $x += 1
# Store hostname
$HostObj.Hostname = $HostNode.hostnames.hostname.name
# Loop through addresses
foreach ($HostAddress in $HostNode.address) {
# Check IP address
If ($HostAddress.addrtype -eq "ipv4") {
# Store IP address
$HostObj.'IP Address' = $HostAddress.addr
}
# Check MAC address
If ($HostAddress.addrtype -eq "mac") {
# Store MAC address
$HostObj.'MAC Address' = $HostAddress.addr
# Store vendor
$HostObj.Vendor = $HostAddress.vendor
}
}
# Append host object to array
$HostItems += $HostObj
}
}
# Print host items
$HostItems
# Export host items to CSV
$HostItems | Export-CSV -NoType .\nmap.csv
С компьютера Unix, прослушивая компьютеры без ОС в той же локальной сети, и, если возможно, через концентратор (не коммутатор), вы можете попробовать
arp
cat /proc/net/arp
Также вы можете попробовать wireshark
(с компьютера под управлением ОС). Опять же, лучше использовать концентратор для перехвата любых сообщений от машин BIOS, включая широковещательные.
show mac-address-table
).Основная проблема здесь в том, что это информация уровня 2, поэтому ее видят только коммутаторы. Некоторые коммутаторы предоставляют интерфейс, который позволяет вам просматривать эту информацию, но если они не позволяют получить ее, единственный способ получить ее - это перехватить ее на физическом уровне, например, установив концентратор между коммутатором.
Если вы используете управляемые коммутаторы, эта информация, вероятно, доступна с коммутатора. Некоторые интегрированные маршрутизаторы / коммутаторы конечного пользователя (например, такие, которые часто также комплектуются модемами ADSL) иногда имеют список клиентов DHCP, который включает MAC-адреса.
Если вы используете неуправляемые коммутаторы и действительно хотите узнать эту информацию, я рекомендую вам купить концентратор, и временно замените им переключатель. Затем вы можете подключить компьютер, на котором работает wirehark, к концентратору и захватывать ARP-пакеты для записи MAC-адресов. В качестве альтернативы вы можете использовать Echolot, чтобы сделать это за вас - он выборочно отслеживает пакеты ARP и создает базу данных MAC-адресов.
Вот решение, которое сработало для меня:
Очень простой небольшой трюк, который вы могли бы проделать в течение 2 секунд, - это работа с тем фактом, что любая операционная система записывает таблицу с Mac и IP-адресом любого устройства, с которым она взаимодействует. Это известно как ТАБЛИЦА ARP. Итак, вопрос в том, как заставить взаимодействие со всеми устройствами? Вы можете просто пропинговать широковещательный IP-адрес. Это не идеально, поскольку некоторые устройства или брандмауэр могут блокировать запрос проверки связи ICMP, но он работает во многих сценариях.
Команды (в широковещательном адресе ipv4 192.168.0.255):
ping 192.168.0.255
В Linux используют:
ping -b 192.168.0.255
Подождите несколько секунд, пока устройства не ответят, а затем выполните:
arp -a
Для пинга IPV6 см. Комментарий Гедриуса Рекасиуса.
Не идеально, но без инструментов, без исследований, без траты времени, работает во всех основных операционных системах и работает быстро.
Сканируйте сеть с помощью Nmap а затем проверьте таблицу ARP (arp -a
в дистрибутивах Linux).
Как уже говорили другие, если у вас есть неуправляемые коммутаторы или BootP / PXE, нет простого способа получить MAC-адреса машин без ОС.
Если ваши работающие машины работают под управлением Windows, легко написать сценарий (обычно через WMI)
Вот несколько примеров: http://gallery.technet.microsoft.com/ScriptCenter/en-us/site/search?f[0pting.Type=SearchText&f[0ght.Value=MAC+address&x=0&y=0
Я собирался предложить переключить таблицу MAC-адресов, но кто-то уже рассмотрел эту таблицу выше.
Если какой-либо из компьютеров являются работает под управлением ОС и имеет IP-адреса, вы можете подключиться к той же локальной сети, вы можете использовать NMAP (или версию с графическим интерфейсом, например Zenmap) из http://nmap.org/... если вы запустите это в той же локальной сети, вы должны получить информацию о MAC-адресах для всех отвечающих машин.
Было бы полезно узнать больше о том, зачем вам нужны MAC-адреса, если есть лучший способ достичь того же результата.
Вы можете собирать информацию ARP, например, с помощью непрерывно работающего arpalert. При этом у вас будет набор адресов ARP, видимых после запуска.
Машины с выключенным питанием не будут отправлять вам ответы ARP.
Чтобы ускорить процесс, вы можете использовать сканирование nmap ping (nmap -sP) в своей сети с сервера, на котором запущен arpalert, чтобы все возможные (живые и работающие) хосты ответили на ваш arp-запрос. Если позже вы будете регулярно запускать ping-сканирование с помощью nmap, у вас больше шансов поймать быстро живущий хост.
фрагмент из arpalert:
Если MAC-адрес отсутствует в списке, arpalert запускает заранее определенный пользовательский сценарий с MAC-адресом и IP-адресом в качестве параметров.
фрагмент из nmap:
Nmap («Network Mapper») - бесплатная утилита с открытым исходным кодом (лицензия) для исследования сети или аудита безопасности.
Посмотрите здесь:
Я использую: nmap -sP 192.168.1.1/24
(замените 192.168.1.1/24 своим диапазоном IP-адресов)
Он покажет вам только включенные машины и выдаст что-то вроде:
[root@x ~]# nmap -sP 192.168.1.1/24
Starting Nmap 6.40 ( http://nmap.org ) at 2014-11-22 14:20 EST
Nmap scan report for 192.168.1.1
Host is up (0.0019s latency).
MAC Address: ZZ:ZZ:54:2E:E9:B4 (Unknown)
Nmap scan report for 192.168.1.33
Host is up (0.035s latency).
MAC Address: ZZ:ZZ:FA:2D:D7:D8 (Intel Corporate)
Nmap scan report for 192.168.1.254
Host is up (0.0020s latency).
MAC Address: ZZ:ZZ:31:02:98:19 (Asustek Computer)
Nmap scan report for 192.168.1.34
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 1.88 seconds
Если у вас не установлена ОС, вы можете использовать live cd linux, в большинстве из них, вероятно, доступен nmap.