您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。