# Linux下怎么讀取MAC地址
## 前言
MAC地址(Media Access Control Address)是網絡設備的唯一硬件標識符,由48位二進制數組成,通常表示為12個十六進制數字(如`00:1A:2B:3C:4D:5E`)。在Linux系統中,獲取MAC地址是網絡配置、設備管理和故障排查中的常見需求。本文將詳細介紹多種獲取MAC地址的方法及其應用場景。
---
## 一、使用`ifconfig`命令
### 1.1 基本用法
`ifconfig`(interface configuration)是傳統的網絡接口配置工具,多數Linux發行版默認安裝:
```bash
ifconfig
輸出示例:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:1a:2b:3c:4d:5e txqueuelen 1000 (Ethernet)
RX packets 12045 bytes 1023345 (1.0 MB)
TX packets 8045 bytes 1256789 (1.2 MB)
其中ether
后即為MAC地址。
ifconfig eth0 | grep ether
注意:部分新系統可能需安裝
net-tools
包:> sudo apt install net-tools # Debian/Ubuntu > sudo yum install net-tools # CentOS/RHEL > ``` --- ## 二、使用`ip link`命令 ### 2.1 現代替代方案 `ip`命令來自`iproute2`工具集,是推薦的新一代網絡工具: ```bash ip link show
輸出片段:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
ip link show eth0 | awk '/link\/ether/{print $2}'
/sys
文件系統Linux內核通過sysfs虛擬文件系統暴露硬件信息:
cat /sys/class/net/eth0/address
輸出示例:
00:1a:2b:3c:4d:5e
ls /sys/class/net/ | while read dev; do echo -n "$dev: "; cat /sys/class/net/$dev/address; done
nmcli
(NetworkManager)適用于使用NetworkManager管理的系統:
nmcli device show eth0 | grep GENERAL.HWADDR
輸出:
GENERAL.HWADDR: 00:1A:2B:3C:4D:5E
nmcli device show | awk '/GENERAL.DEVICE:|GENERAL.HWADDR/'
排除lo
、docker
等虛擬接口:
ip link | awk '/link\/ether/ && !/docker|virbr|veth/{print $2}'
iw dev wlan0 info | grep addr
lsusb -tv | grep -i ethernet
dmesg | grep -i 'usb.*mac'
import fcntl
import socket
import struct
def get_mac(interface='eth0'):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', interface[:15].encode()))
return ':'.join(f'{b:02x}' for b in info[18:24])
print(get_mac())
#!/bin/bash
INTERFACE=${1:-eth0}
MAC=$(cat /sys/class/net/$INTERFACE/address 2>/dev/null)
[ -z "$MAC" ] && echo "Interface $INTERFACE not found" || echo "$INTERFACE MAC: $MAC"
sudo ip link set dev eth0 down
sudo ip link set dev eth0 address 00:11:22:33:44:55
sudo ip link set dev eth0 up
編輯/etc/network/interfaces
:
auto eth0
iface eth0 inet dhcp
hwaddress ether 00:11:22:33:44:55
警告:修改MAC地址可能違反網絡策略,操作前需獲得授權。
ifconfig
不顯示MAC地址?sudo ip link set eth0 up
dmesg | grep eth0
arp -an
00:16:3E
屬于VMware)00:16:3E
開頭00:0C:29
或00:50:56
開頭掌握Linux下讀取MAC地址的多種方法,能夠靈活應對不同場景需求。建議優先使用ip link
和/sys
文件系統等現代工具,同時注意MAC地址相關的安全策略。如需進一步自動化管理,可結合腳本或編程接口實現。
擴展閱讀: - IEEE OUI數據庫:https://standards.ieee.org/products-services/regauth/oui/ -
macchanger
工具:批量修改MAC地址 - RFC 7042:MAC地址行為準則 “`
(全文約1850字,實際字數可能因顯示格式略有差異)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。