Если мы использовали gnused (по умолчанию в Linux и многих других, и доступно для всех)
sed -zri 's/([^\n]\n)(pattern)/\1\n\2/g' file
где
([^ \ n] \ n) (шаблон)
шаблон после непустого строка -z
разделите «строки» нулевым символом (пропустите файл) -r
, чтобы иметь расширенные регулярные выражения Вы можете получить фактического поставщика, отправив запрос с помощью чего-то вроде CURL к этому API:
curl -XGET "https://api.macaddress.io/v1?apiKey=at_2d31hlNQAO1PXZVTecL6yoVAxI8IW&output=vendor&search=bc:f1:f2:12:b4:93"
ИЛИ
wget -qO- "https://api.macaddress.io/v1?apiKey=at_2d31hlNQAO1PXZVTecL6yoVAxI8IW&output=vendor&search=bc:f1:f2:12:b4:93"
Для перечисленных неизвестных MAC-адресов были возвращены следующие результаты:
bc:f1:f2:12:b4:93 -> Cisco Systems, Inc
f0:db:e2:de:11:80 -> Apple, Inc
d8:61:94:e5:0b:1d -> Objetivos y Sevicios de Valor Añadido
84:11:9e:2b:1c:d6 -> Samsung Electronics Co, Ltd
ec:1f:72:5d:42:d0 -> Samsung Electro-Mechanics(Thailand)
44:d9:e7:0a:0b:98 -> Ubiquiti Networks Inc
Чтобы использовать эту службу, вам необходимо получить APIKey, который предоставляется бесплатно, если у вас менее 1000 запросов в день.
Следующий сценарий автоматизирует процесс и работает во всех дистрибутивах Linux, поскольку он не зависит от специализированных пакетов. Он просто анализирует вывод команды ip
, изолирует вендорскую часть mac-адреса в переменную, которая, наконец,grepобрабатывается через онлайновую базу данных префиксов вендоров.
#!/bin/bash
OUI=$(ip addr list|grep -w 'link'|awk '{print $2}'|grep -P '^(?!00:00:00)'| grep -P '^(?!fe80)' | tr -d ':' | head -c 6)
curl -sS "http://standards-oui.ieee.org/oui.txt" | grep -i "$OUI" | cut -d')' -f2 | tr -d '\t'
Проявив немного творчества, вы можете адаптировать это для удаленного выполнения через ssh. Я видел и другие предложения по идентификации сведений о поставщике с помощью dmidecode
для снятия отпечатков ОС, но при тестировании получил противоречивые результаты с этим инструментом. На Raspberry Pi dmidecode
полностью не работает. ХТХ-
#!/bin/bash
arp -an | egrep -v incomplete | while read line ; do mac=$( echo $line | awk -F' ' '{print $4}' | sed 's/:/-/g' | tr "[:lower:]" "[:upper:]" | cut -c 1-8 ) ; vendor=$( egrep "$mac" /usr/share/hwdata/oui.txt ) ; echo "$line : $vendor" ; done
Выход:
? (192.168.88.36) at 60:03:08:a8:4e:86 [ether] on eth0 : 60-03-08 (hex) Apple, Inc.
? (192.168.88.38) at d8:8f:76:6f:59:0a [ether] on eth0 : D8-8F-76 (hex) Apple, Inc.