web-dev-qa-db-fra.com

Le meilleur moyen d'extraire l'adresse MAC de la sortie d'ifconfig?

Quel est le meilleur moyen d'extraire l'adresse MAC de la sortie de ifconfig?

Exemple de sortie:

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
          ....
          ....

Devrais-je utiliser cut, AWK ou autre chose, et quels sont les avantages et inconvénients d'une méthode par rapport à l'autre.

60
Aman Jain

Vous pouvez faire un chat sous /sys/class/ 

cat /sys/class/net/*/address

Spécifiquement pour eth0

cat /sys/class/net/eth0/address
105
Michalis

J'utiliserais:

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

Le -o fera que grep n’imprimera que la partie de la ligne qui correspond à l’expression. [[:xdigit:]]{1,2} correspond à 1 ou 2 chiffres hexadécimaux (Solaris ne génère pas de zéros à gauche).

67
Robert Gamble

J'aime utiliser/sbin/ip pour ce genre de tâches, car il est beaucoup plus facile d'analyser:

$ 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

Vous pouvez trivialement obtenir l'adresse mac de cette sortie avec awk:

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

Si vous voulez mettre un peu plus d'effort et analyser plus de données, je vous recommande d'utiliser l'argument -online de la commande ip, qui vous permettra de traiter chaque ligne comme un nouveau périphérique:

$ 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
21
Jerub

Vous n'êtes pas sûr s'il y a vraiment des avantages, mais vous pouvez simplement utiliser awk:

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

Comme l'exemple de l'OP fait référence à Bash, voici un moyen d'extraire des champs tels que HWaddr sans utiliser d'outils supplémentaires:

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

Dans la 1ère étape, cela attribue la sortie de ifconfig à x. La 2ème étape supprime tout ce qui précède "HWaddr". Dans la dernière étape, tout ce qui suit "" (l'espace derrière le MAC) est supprimé.

Référence: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

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

Pour Rhat ou CentO, essayez ip add | grep link/ether | awk '{print $2}'

2
nPcomp

Je préfère la méthode décrite ici (avec une légère modification): 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

Vous pouvez ensuite créer une courte commande 'myip' pour une utilisation ultérieure:

echo "alias myip=\"ifconfig | grep 'inet ' | grep -v 127.0.0.1 | cut -d ' ' -f2\"" >> ~/.bash_profile
2
manafire

Sur Ubuntu 14.04 dans le terminal 

ifconfig | grep HW
1
Fernando_Jr

Celui-ci, ça va:

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

ou plus spécifiquement 

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

et aussi un simple

ifconfig eth0 | head -n1 | tr -s ' ' | cut -d' ' -f5`
1
phoxis

Je devais obtenir l'adresse MAC de l'adaptateur actif, donc fini par utiliser cette commande. 

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

J'espère que ça aide.

0
Dogukan

ifconfig en0 | grep ether - pour l'adresse mac câblée 

ifconfig en1 | grep ether - pour l'adresse mac sans fil 

0
Sateesh Pasala

Nice et rapide:

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

Cela fonctionne pour moi sur Mac OS X:

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

Ainsi fait:

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

Les deux sont des variantes des exemples ci-dessus.

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

Remarque: sous OS X, eth0 risque de ne pas fonctionner. Utilisez p2p0:

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

cela a fonctionné pour moi

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

au lieu de eth0 vous pouvez écrire l'interface dont vous avez besoin c'est son adresse mac

0
Adel Skn