2008-10-29 13 views
53

¿Cuál es la mejor forma de extraer la dirección MAC de la salida ifconfig?¿La mejor forma de extraer la dirección MAC de la salida de ifconfig?

Salida de ejemplo:

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

¿Debo usar corte, AWK o cualquier otra cosa, y cuáles son las ventajas y desventajas de un método sobre el otro.

+0

¿Cuál es la dirección MAC? – Nabin

+0

@Nabin: el campo "HWaddr". –

Respuesta

8

No está seguro de si realmente hay alguna ventaja, pero se puede simplemente usar awk:

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

no funciona en RHEL7 :( –

+0

Utilice 'ip addr' en lugar de ifconfig.' Ip addr | grep -C1 "enlace/ether" 'debería hacer. –

66

me gustaría utilizar:

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

La -o hará que grep para imprimir sólo la parte de la línea que coincide con la expresión. [[:xdigit:]]{1,2} coincidirá con 1 o 2 dígitos hexadecimales (Solaris no genera ceros a la izquierda).

+1

¿Qué? Esto coincidirá independientemente de la ubicación de la dirección MAC mientras que el otro soluciones no. –

+0

Tiene la ventaja de que también funciona en OSX ya que ifconfig usa 'ether' en lugar de 'HWaddr' – albertb

+0

Esa fue mi intención, he trabajado con muchos Unixes diferentes y esta es la única solución que funcionará en todos ellos. –

20

me gusta usar/sbin/ip para este tipo de tareas, porque es mucho más fácil de analizar:

$ 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 

Puede obtener trivialmente la dirección MAC de esta salida con awk:

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

Si usted quiere poner un poco más de esfuerzo, y analizar más datos, me recomiendan usar el argumento -en línea con el comando ip, que le permitirá tratar a cada línea como un nuevo dispositivo:

$ 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 
+0

No todas las distribuciones envían '/ sbin/ip', que pertenece al paquete' iproute2 '. Pero esta es la mejor solución: ¡ip es mucho más agradable que ifconfig! – ephemient

+0

realmente lo disfruté. – amin

4

Desde el ejemplo de la OP se refiere a Bash, aquí es una manera de extraer campos como HWaddr sin el uso de herramientas adicionales:

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

En la primera etapa de esta asigna que la salida de ifconfig para x. El 2do paso elimina todo antes de "HWaddr". En el paso final todo lo que se elimine después de "" (el espacio detrás del MAC).

Referencia: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

1

¿Qué tal este:

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

o más específicamente

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

y también un sencillo

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

Usted puede hacer un gato unde r /sys/class/

cat /sys/class/net/*/address 

Específicamente para eth0

cat /sys/class/net/eth0/address 
+0

Aquí hay una secuencia de comandos de Python para hacer lo mismo: https://gist.github.com/amitsaha/9677822 –

+1

Esto proporciona todas las direcciones, no solo para eth0, por ejemplo. – mickeyf

+0

Iin openwrt cat/sys/class/net/eth0/address funciona un tratamiento: "cat/sys/class/net/eth0/address" da "c2: ee: 1e: 08: e6: 39" Nota eth0 lo vincula a la ubicación específica del hardware: "cd/sys/class/net/eth0 /" cambia el cwd a "/sys/devices/platform/ag71xx.0/net/eth0/" –

0

Nota: en OS X eth0 puede no funcionar. Uso p2p0:

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

interfaz en mi servidor Mac es en0, por lo que p2p0 no funciona siempre – Dukeatcoding

0

Esto funciona para mí en Mac OS     X:

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

también lo hace:

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

Ambos son variaciones de los ejemplos anteriores.

-1

salida de 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) 

La mejor manera de extraer la dirección MAC es:

ifconfig | sed '1,1!d' | sed 's/.*HWaddr //' | sed 's/\ .*//' | sed -e 's/:/-/g' > mac_address 
0
ifconfig | grep -i hwaddr | cut -d ' ' -f11 
-1

Uso:

ifconfig eth0 | grep HWaddr 

o

ifconfig eth0 |grep HWaddr 

Esto extraerá solo la dirección MAC y nada más.

Usted puede cambiar su dirección MAC para lo que quiera:

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

HW, HWaddr no es una opción para algunos sistemas Linux/Unix, y no mostrará nada. –

1

En Ubuntu 14.04 en el terminal

ifconfig | grep HW 
0

agradable y rápido uno:

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

que necesitaba para obtener la dirección MAC del adaptador activo, así que terminamos usando este comando.

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

Espero que ayude.

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

Para Rhat o CentOs tratar ip add | grep link/ether | awk '{print $2}'

Cuestiones relacionadas