it-swarm.com.de

Beste Möglichkeit, die MAC-Adresse aus der Ausgabe von ifconfig zu extrahieren?

Wie kann die MAC-Adresse am besten aus der Ausgabe von ifconfig extrahiert werden?

Beispielausgabe:

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

Sollte ich cut, AWK oder irgendetwas anderes verwenden, und was sind die Vorzüge und Nachteile einer Methode gegenüber der anderen?.

60
Aman Jain

Du kannst eine Katze unter /sys/class/ machen 

cat /sys/class/net/*/address

Speziell für eth0

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

Ich würde ... benutzen:

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

Das -o bewirkt, dass grep nur den Teil der Zeile druckt, der dem Ausdruck entspricht. [[:xdigit:]]{1,2} stimmt mit 1 oder 2 Hexadezimalstellen überein (Solaris gibt keine führenden Nullen aus).

67
Robert Gamble

Ich mag es,/sbin/ip für diese Art von Aufgaben zu verwenden, da es viel einfacher zu analysieren ist:

$ 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

Sie können die MAC-Adresse aus dieser Ausgabe mit awk einfach erhalten:

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

Wenn Sie sich etwas mehr Mühe geben und mehr Daten analysieren möchten, empfiehlt es sich, das Argument -online für den Befehl ip zu verwenden, wodurch Sie jede Zeile als neues Gerät behandeln können:

$ 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

Nicht sicher, ob es wirklich Vorteile gibt, aber Sie können awk einfach verwenden:

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

Da sich das Beispiel des OP auf Bash bezieht, können Sie Felder wie HWaddr ohne die Verwendung zusätzlicher Tools extrahieren:

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

Im ersten Schritt wird die Ausgabe von ifconfig x zugewiesen. Der 2. Schritt entfernt alles vor "HWaddr". Im letzten Schritt wird alles nach "" (dem Platz hinter dem MAC) entfernt.

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

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

Für Rhat oder CentOs versuchen Sie ip add | grep link/ether | awk '{print $2}'

2
nPcomp

Ich bevorzuge die hier beschriebene Methode (mit leichten Modifikationen): 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

Das können Sie dann als Alias ​​auf einen kurzen 'myip'-Befehl zur späteren Verwendung verwenden:

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

Auf Ubuntu 14.04 im Terminal 

ifconfig | grep HW
1
Fernando_Jr

Wie wäre es mit diesem:

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

oder genauer 

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

und auch eine einfache

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

Ich musste die MAC-Adresse des aktiven Adapters abrufen, also diesen Befehl verwenden. 

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

Ich hoffe es hilft.

0
Dogukan

ifconfig de0 | grep ether - für die verkabelte MAC-Adresse 

ifconfig de1 | grep ether - für die drahtlose MAC-Adresse 

0
Sateesh Pasala

Schön und schnell:

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

Dies funktioniert für mich unter Mac OS X:

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

Tut auch:

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

Beides sind Variationen der obigen Beispiele.

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

Hinweis: Unter OS X funktioniert eth0 möglicherweise nicht. Verwenden Sie p2p0:

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

das hat bei mir funktioniert

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

anstelle von eth0 können Sie die Schnittstelle schreiben, die Sie benötigen, es ist Mac-Adresse

0
Adel Skn