Лучший способ извлечь MAC-адрес из вывода ifconfig? - PullRequest
61 голосов
/ 29 октября 2008

Каков наилучший способ извлечь MAC-адрес из вывода ifconfig?

Пример вывода:

bash-3.00# ifconfig eth0        
eth0      Link encap:Ethernet  HWaddr 1F:2E:19:10:3B:52    
          inet addr:127.0.0.66  Bcast:127.255.255.255  Mask:255.0.0.0    
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ....
          ....

Должен ли я использовать cut, AWK или что-то еще, и каковы преимущества и недостатки одного метода перед другим.

Ответы [ 17 ]

106 голосов
/ 13 июня 2011

Вы можете сделать кошку под /sys/class/

cat /sys/class/net/*/address

Специально для eth0

cat /sys/class/net/eth0/address
67 голосов
/ 29 октября 2008

Я бы использовал:

ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

-o заставит grep печатать только ту часть строки, которая соответствует выражению. [[:xdigit:]]{1,2} будет соответствовать 1 или 2 шестнадцатеричным цифрам (Solaris не выводит начальные нули).

22 голосов
/ 29 октября 2008

Мне нравится использовать / sbin / ip для таких задач, потому что разбирать намного проще:

$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:30:21:48 brd ff:ff:ff:ff:ff:ff

Вы можете получить MAC-адрес из этого вывода с помощью awk:

$ ip link show eth0 | awk '/ether/ {print $2}'
00:0c:29:30:21:48

Если вы хотите приложить немного больше усилий и проанализировать больше данных, я рекомендую использовать аргумент -online в команде ip, который позволит вам рассматривать каждую строку как новое устройство:

$ ip -o link 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue \    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000\    link/ether 00:0c:29:30:21:48 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000\    link/ether 00:0c:29:30:21:52 brd ff:ff:ff:ff:ff:ff
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 100\    link/[65534] 
5: sit0: <NOARP> mtu 1480 qdisc noop \    link/sit 0.0.0.0 brd 0.0.0.0
10 голосов
/ 29 октября 2008

Не уверен, есть ли какие-то преимущества, но вы можете просто использовать awk:

ifconfig eth0 | awk '/HWaddr/ {print $5}'
4 голосов
/ 13 февраля 2011

Поскольку пример OP относится к Bash, вот способ извлечь поля, такие как HWaddr, без использования дополнительных инструментов:

x=$(ifconfig eth0) && x=${x#*HWaddr } && echo ${x%% *}

На 1-м шаге это присваивает выход ifconfig x. 2-й шаг удаляет все до "HWaddr". На последнем шаге все после "" (пробел за MAC) удаляется.

Ссылка: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

2 голосов
/ 28 сентября 2011

Я предпочитаю метод, описанный здесь (с небольшой модификацией): http://www.askdavetaylor.com/how_do_i_figure_out_my_ip_address_on_a_mac.html

ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d " " -f2

Который затем вы можете использовать в качестве псевдонима для короткой команды myip для дальнейшего использования:

echo "alias myip=\"ifconfig | grep 'inet ' | grep -v 127.0.0.1 | cut -d ' ' -f2\"" >> ~/.bash_profile
2 голосов
/ 02 июня 2016
ifconfig | grep HW | awk '{print $5}'

Для Rhat или CentOs попробуйте ip add | grep link/ether | awk '{print $2}'

1 голос
/ 30 сентября 2014

На Ubuntu 14.04 в терминале

ifconfig | grep HW
1 голос
/ 11 мая 2011

Как насчет этого:

ifconfig eth0 | grep -Eo ..\(\:..\){5}

или более конкретно

ifconfig eth0 | grep -Eo [:0-9A-F:]{2}\(\:[:0-9A-F:]{2}\){5}

а также простой

ifconfig eth0 | head -n1 | tr -s ' ' | cut -d' ' -f5`
0 голосов
/ 10 мая 2016

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

ifconfig -a | awk '/^[a-z]/ { iface=$1; mac=$NF; next } /inet addr:/ { print mac }' | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...