Подтвердить что ты не робот

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

Каков наилучший способ извлечь 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 или что-то еще, и каковы достоинства и недостатки одного метода над другим.

4b9b3361

Ответ 1

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

cat /sys/class/net/*/address

В частности, для eth0

cat /sys/class/net/eth0/address

Ответ 2

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

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

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

Ответ 3

Мне нравится использовать /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

Ответ 4

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

ifconfig eth0 | awk '/HWaddr/ {print $5}'

Ответ 5

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

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

На первом шаге присваивается значение ifconfig для x. Второй шаг удаляет все до "HWaddr". На последнем шаге все после "" (пробел по MAC) удаляется.

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

Ответ 6

Для Ubuntu/Debian

ifconfig | grep HW | awk '{print $5}'

Для Rhat или CentOs попробуйте

ip add | grep link/ether | awk '{print $2}'

Ответ 7

Я предпочитаю описанный здесь метод (с небольшими изменениями): 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

Ответ 8

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

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`

Ответ 9

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

ifconfig | grep HW

Ответ 10

Примечание. OS X eth0 может не работать. Используйте p2p0:

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

Ответ 11

Это работает для меня на Mac OS X:

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

Так делает:

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

Оба варианта являются примерами выше.

Ответ 12

ifconfig | grep -i hwaddr | cut -d ' ' -f11

Ответ 13

Хороший и быстрый:

ifconfig eth0 | grep HWaddr | cut -d ' ' -f 11

Ответ 14

Мне нужно было получить 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}'

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

Ответ 15

ifconfig en0 | grep ether - для проводного mac-адреса

ifconfig en1 | grep ether - для беспроводного mac-адреса

Ответ 16

это сработало для меня

ifconfig eth0 | grep -o -E ..:..:..:..:..:..

вместо eth0 вы можете написать нужный вам интерфейс mac адрес

Ответ 17

Выход ifconfig:

$ifconfig

eth0      Link encap:Ethernet  HWaddr 00:1b:fc:72:84:12
      inet addr:172.16.1.13  Bcast:172.16.1.255  Mask:255.255.255.0
      inet6 addr: fe80::21b:fcff:fe72:8412/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:638661 errors:0 dropped:20 overruns:0 frame:0
      TX packets:93858 errors:0 dropped:0 overruns:0 carrier:2
      collisions:0 txqueuelen:1000
      RX bytes:101655955 (101.6 MB)  TX bytes:42802760 (42.8 MB)
      Memory:dffc0000-e0000000

lo        Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:16436  Metric:1
      RX packets:3796 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3796 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:517624 (517.6 KB)  TX bytes:517624 (517.6 KB)

Лучший способ извлечь MAC-адрес:

ifconfig | sed '1,1!d' | sed 's/.*HWaddr //' | sed 's/\ .*//' | sed -e 's/:/-/g' > mac_address

Ответ 18

Использование:

ifconfig eth0 | grep HWaddr

или

ifconfig eth0 |grep HWaddr

Это приведет только к MAC-адресу и не к чему.

Вы можете изменить свой MAC-адрес на все, что хотите:

ifconfig eth0 down,
ifconfig eth0 hw ether (new MAC address),
ifconfig eth0 up