Как узнать MAC-адрес машин в сети?

12

Как узнать MAC-адрес компьютеров в сети?

Мне нужно обнаружить машины, которые доступны только с установленным BIOS (без операционной системы).

И мне нужно найти MAC-адрес компьютеров, которые работают.

Питер Мортенсен
источник
Также см. Serverfault.com/questions/260333/…
Стефан Ласевский
Межсайтовый дубликат (при переполнении стека): как узнать MAC-адрес компьютеров в сети и по сети? ,
Питер Мортенсен

Ответы:

8

Вам нужно будет получить доступ к информации, доступной на ваших управляемых коммутаторах. Если у вас есть неуправляемая сеть, я не вижу способа сделать это.

Предполагается, что целевые компьютеры поддерживают Wake-on-LAN (WoL). В этом случае устанавливается связь с сервером (посмотрите на светодиодный индикатор), и сетевая карта прослушивает трансляции WoL. AFAIK, карта не отвечает ни на что в этом состоянии. Если нет WoL, карта, скорее всего, выключена (индикатор связи отсутствует) и не будет работать вообще.

Posipiet
источник
7

Если машины не включены, это невозможно.

Если они включены, я думаю, это также невозможно, так как вам нужен минимальный сетевой стек, чтобы хотя бы отвечать на такие вещи, как запросы ARP и т. Д., Который не работает без установленной ОС.

Что может сработать (я не знаю и не могу сейчас проверить), так это то, что сетевой адаптер и коммутатор обмениваются данными, когда сетевой адаптер подключен или включен, и коммутатор таким образом узнает MAC-адрес. Если это так, вам понадобится управляемый коммутатор и запросите его для подключенных MAC-адресов.

Свен
источник
2
Вы можете получить его без сетевого стека, если он запрашивает bootp или pxe boot. Зависит от машины, будет ли это работать, я думаю.
Барт Сильверстрим
6

Вы можете использовать Nmap для очень быстрого сканирования ARP, используя следующий синтаксис.

nmap -sn -PR -oX nmap.xml 192.168.1.0/24

При этом используется пинг ARP (только запросы 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
Джон Гомер
источник
Я попробовал команду выше, и получил ошибку Scantype n not supported. Очевидно, флаг -snне поддерживается в Nmap 4.x.
Стефан Ласевский
Из nmap 5.30BETA1 ChangeLog:
Джон Гомер
2
Переключен на -Pn и -sn и используется в качестве предпочтительного синтаксиса для пропуска сканирования ping и сканирования порта соответственно. Ранее были рекомендованы опции -PN и -sP. Это устанавливает более регулярный синтаксис для некоторых опций, которые отключают фазы сканирования: -n нет обратного DNS -Pn не обнаруживает хост -sn не сканирует порт Мы также чувствовали, что старый параметр -sP («ping scan») немного вводил в заблуждение потому что текущие версии Nmap могут пойти намного дальше (включая -sC и --traceroute) даже при отключенном сканировании портов. Мы сохраним поддержку предыдущих названий опций в обозримом будущем.
Джон Гомер
Исходя из этого, вы должны иметь возможность использовать синтаксис '-sP' вместо более нового параметра '-sn'. К сожалению, у меня нет версии nmap4 для тестирования.
Джон Гомер
3
  1. Просмотр информации о вашем коммутаторе / маршрутизаторе, если коммутатор достаточно продвинут.
    (В коммутаторах Cisco команда есть show mac-address-table).
  2. Если на компьютерах установлена ​​BIOS / сетевая карта с поддержкой PXE, прочитайте информацию из журналов DHCP, поскольку они попытаются получить аренду DHCP. Если у вас нет DHCP, просто сбросьте весь широковещательный трафик с помощью Wireshark и отфильтруйте трафик DHCP. Все новые машины без ОС будут показываться в трафике.
Кристапу
источник
3

С компьютера Unix, прослушивая компьютеры без ОС в той же локальной сети, и, если возможно, через концентратор (не коммутатор), вы можете попробовать

arp
cat /proc/net/arp

Также вы можете попробовать wireshark(с компьютера под управлением ОС). Опять же, лучше использовать концентратор для перехвата любых сообщений с компьютеров BIOS, включая широковещательные сообщения.

Кольцо Ø
источник
1

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

Если вы используете управляемые коммутаторы, эта информация, вероятно, доступна из коммутатора. Некоторые интегрированные маршрутизаторы / коммутаторы конечного пользователя (например, такие, которые часто также упаковывают модемы ADSL) иногда имеют список клиентов DHCP, который включает MAC-адреса.

Если вы используете неуправляемые коммутаторы и действительно хотите знать эту информацию, я рекомендую купить концентратор и временно заменить коммутатор на него. Затем вы можете подключить компьютер с Wireshark к концентратору и перехватывать пакеты ARP для записи MAC-адресов. В качестве альтернативы вы можете использовать Echolot, чтобы сделать это за вас - он выборочно отслеживает пакеты ARP и создает базу данных MAC-адресов.

imoatama
источник
Изменить - просто перечитайте часть о том, что они только в BIOS. Это создает дополнительные проблемы, помимо проблемы перехвата данных уровня 2 - клиенты могут даже не отправлять какие-либо данные по сети. Если у клиентов есть BIOS, который выполняет DHCP или отправляет пакеты ARP, их можно увидеть с коммутатора. Я не уверен, какие версии BIOS поддерживают это, но я знаю, что некоторые делают.
imoatama
1

Вот решение, которое сработало для меня:

  1. Включите сетевую загрузку в BIOS. (Например, установите сетевой адаптер на «Включено с помощью PXE»)
  2. Загрузи машину.
  3. Машина попытается загрузиться из сети, показывая вам MAC-адрес в процессе.
Игорь Островский
источник
1

Очень простой маленький трюк, который вы можете сделать за 2 секунды, заключается в том, что любая операционная система записывает таблицу с mac и IP-адресом любого устройства, с которым она взаимодействует. Это известно как ARP TABLE. Таким образом, вопрос заключается в том, как заставить взаимодействие со всеми устройствами? Вы можете просто пропинговать широковещательный IP-адрес. Это не идеально, поскольку некоторые устройства или брандмауэр могут блокировать пинг-запрос ICMP, но это работает во многих сценариях.

Команды (в широковещательном адресе ipv4 192.168.0.255):

ping 192.168.0.255

В Linux используют:

ping -b 192.168.0.255

Подождите несколько секунд, пока устройства ответят, затем выполните:

arp -a

Пинг IPV6 см. В комментарии Гедриуса Рекасиуса.

Не идеально, но не инструменты, не исследования, не трата времени, работает во всех основных операционных системах и работает быстро.

Джованни Силва
источник
Мне проще и надежнее выполнять такие эхо-запросы по IPv6, чем по IPv4. Пример команды может выглядеть следующим образом ping6 -c2 -n ff02::1%wlan0. Нужно только обновить имя используемого сетевого интерфейса, IP-адрес для этой цели всегда зависит ff02::1от того, в какой сети вы находитесь.
Касперд
1

Просканируйте сеть с помощью Nmap, а затем проверьте таблицу ARP ( arp -aв дистрибутивах Linux).

MihaiM
источник
0

Как уже говорили другие, если у вас есть неуправляемые коммутаторы или BootP / PXE, нет простого способа получить MAC компьютеров без ОС.

Если ваши работающие машины работают под управлением Windows, это легко для сценария (обычно через WMI)

Здесь есть несколько примеров: http://gallery.technet.microsoft.com/ScriptCenter/en-us/site/search?f[0].Type=SearchText&f[0].Value=MAC+address&x=0&y= 0

gWaldo
источник
0

Я собирался предложить переключить таблицу MAC-адресов, но кто-то уже рассмотрел этот выше.

Если какие - либо из компьютеров имеет работу ОС и иметь IP - адрес, вы можете подключиться к той же локальной сети, вы можете использовать Nmap (или с графическим интерфейсом , как Zenmap) из http://nmap.org/ ... если вы бежите это в той же локальной сети, вы должны получить информацию MAC-адреса для всех машин, которые отвечают.

Было бы полезно узнать больше о том, зачем вам нужны MAC-адреса, если есть лучший способ добиться того же результата.

Митч Миллер
источник
0

Вы можете собирать информацию ARP с помощью, например, постоянно работающего arpalert. При этом у вас будет набор ARP-адресов, видимых после запуска.

Выключенные машины не будут отправлять вам ответы ARP.

Чтобы ускорить процесс, вы можете использовать nmap-пинг (nmap -sP) в вашей сети с сервера, на котором вы запускаете arpalert, чтобы активировать все возможные (живые и работающие) хосты для ответа на ваш запрос arp. Благодаря регулярному запуску nmap-сканирования у вас больше шансов поймать недолговечный хост.

фрагмент от arpalert:

Если MAC-адрес отсутствует в списке, arpalert запускает предопределенный сценарий пользователя с MAC-адресом и IP-адресом в качестве параметров.

фрагмент из nmap:

Nmap («Network Mapper») - это бесплатная утилита с открытым исходным кодом (лицензия) для исследования сети или аудита безопасности.

Оглянись здесь:

asdmin
источник
0

Я использую: 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

Если у вас не установлена ​​ОС, вы можете использовать Linux Live CD, Nmap, вероятно, доступен в большинстве из них

neofutur
источник