在Linux系统中,MAC地址(Media Access Control Address)是网卡的物理地址,用于在网络中唯一标识网络接口设备,查询MAC地址是网络配置、故障排查、安全审计等场景中的常见操作,Linux提供了多种命令和工具来查询MAC地址,本文将详细介绍这些方法,包括它们的适用场景、具体用法及示例输出,帮助用户根据实际需求选择合适的查询方式。
使用ifconfig
命令查询MAC地址
ifconfig
是传统的网络配置工具,属于net-tools
软件包,通过它可以查看和配置网络接口信息,包括MAC地址。
基本语法
ifconfig [网络接口名称]
若不指定接口名称,则显示所有已启用网络接口的信息。
示例操作
假设要查询以太网接口eth0
的MAC地址,执行:
ifconfig eth0
输出结果中,HWaddr
或ether
字段后的值即为MAC地址,
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 12345 bytes 1234567 (1.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6789 bytes 654321 (638.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其中ether 00:1a:2b:3c:4d:5e
即为eth0
的MAC地址。
注意事项
- 部分Linux发行版(如Ubuntu 18.04+、CentOS 7+)默认未安装
net-tools
,需手动安装:sudo apt install net-tools # Debian/Ubuntu sudo yum install net-tools # RHEL/CentOS
ifconfig
命令逐渐被ip
命令取代,建议优先使用ip
命令(后文介绍)。
使用ip
命令查询MAC地址
ip
命令是iproute2
软件包的核心工具,功能更强大且高效,是现代Linux系统中推荐的网络配置工具。
基本语法
ip link show [网络接口名称] # 或简写为 ip a [网络接口名称]
不指定接口名称时,显示所有网络接口的详细信息。
示例操作
查询eth0
接口的MAC地址:
ip link show eth0
输出结果中,link/ether
字段后的值即为MAC地址:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::21a:2bff:fe3c:4d5e/64 scope link
valid_lft forever preferred_lft forever
若需快速提取MAC地址,可结合grep
和awk
命令:
ip link show eth0 | grep -o 'link/ether [^ ]*' | awk '{print $2}'
适用场景
- 支持更多网络接口类型(如VLAN、Bonding等),输出信息更结构化。
- 可直接查看接口状态(如
UP/DOWN
)、MTU值等,无需额外命令。
通过/sys/class/net/
目录查询MAC地址
Linux系统将网络设备信息暴露在/sys/class/net/
目录下,每个子目录对应一个网络接口,其中address
文件存储了该接口的MAC地址。
基本语法
cat /sys/class/net/[网络接口名称]/address
示例操作
查询eth0
的MAC地址:
cat /sys/class/net/eth0/address
输出结果为:
00:1a:2b:3c:4d:5e
适用场景
- 适用于脚本编程,无需调用外部命令,直接读取文件即可获取MAC地址,效率较高。
- 可批量查询所有接口的MAC地址,
for interface in /sys/class/net/*; do echo "$(basename $interface): $(cat $interface/address)" done
使用ethtool
工具查询MAC地址
ethtool
是一个用于查询和配置网卡参数的工具,可获取网卡的详细信息,包括MAC地址、速率、双工模式等。
基本语法
ethtool -P [网络接口名称] # 查询永久MAC地址 ethtool [网络接口名称] # 查询当前MAC地址(包含详细信息)
示例操作
查询eth0
的永久MAC地址:
ethtool -P eth0
输出结果为:
Permanent address: 00:1a:2b:3c:4d:5e
注意事项
- 部分系统默认未安装
ethtool
,需手动安装:sudo apt install ethtool # Debian/Ubuntu sudo yum install ethtool # RHEL/CentOS
- 永久MAC地址是网卡的物理地址,通常不可修改,而当前MAC地址可能通过软件临时更改。
使用arp
命令查询局域网内设备的MAC地址
arp
命令用于查看和管理系统的ARP(地址解析协议)缓存,记录了局域网内IP地址与MAC地址的映射关系,可用于查询其他设备的MAC地址。
基本语法
arp -a [IP地址] # 查询指定IP对应的MAC地址 arp -n # 以数字形式显示,避免域名解析
示例操作
查询局域网内IP地址168.1.1
对应的MAC地址:
arp -a 192.168.1.1
输出结果为:
? (192.168.1.1) at 00:11:22:33:44:55 [ether] on eth0
其中00:11:22:33:44:55
即为目标设备的MAC地址。
适用场景
- 适用于排查局域网内设备连通性问题,或识别未知设备。
- 需目标设备与当前主机处于同一网段且已通信(ARP缓存条目存在)。
使用硬件信息工具查询MAC地址
lshw
工具
lshw
(List Hardware)是一款硬件信息查看工具,可显示详细的硬件配置,包括网卡的MAC地址。
基本语法
sudo lshw -C network
示例输出
*-network:0 description: Ethernet interface product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller vendor: Realtek Semiconductor Co., Ltd. physical id: 0.0.0.0 bus info: pci@0000:02:00.0 logical name: eth0 version: 06 serial: 00:1a:2b:3c:4d:5e size: 1Gbit/s capacity: 1Gbit/s width: 64 bits clock: 33MHz capabilities: pm msi pciexpress msix vpd bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=2.3lk-NAPI duplex=full ip=192.168.1.100 latency=0 link=yes multicast=yes speed=1Gbit/s resources: irq:41 ioport:3000(size=256) memory:dfffc000-dfffffff memory:fe200000-fe203fff
其中serial:
字段即为MAC地址。
dmidecode
工具
dmidecode
用于读取DMI(Desktop Management Interface)表中的硬件信息,通常需要root权限。
基本语法
sudo dmidecode -s baseboard-serial-number # 部分主板将MAC地址存储在序列号中
注意事项
- 输出结果可能不直接包含MAC地址,需结合
lshw
或ip
命令确认。 - 不同主板的DMI表结构可能不同,需根据实际输出判断。
查询MAC地址的方法对比
为方便用户快速选择合适的方法,以下是常用查询方式的对比:
命令/工具 | 适用场景 | 是否需安装额外工具 | 输出特点 | 示例命令 |
---|---|---|---|---|
ifconfig |
传统网络配置,查看所有接口信息 | 是(net-tools) | 显示HWaddr/ether字段 | ifconfig eth0 |
ip link show |
现代Linux推荐,结构化输出 | 否(默认安装) | 显示link/ether字段 | ip link show eth0 |
/sys/class/net/ |
脚本编程,批量查询 | 否(默认安装) | 直接输出MAC地址,无冗余信息 | cat /sys/class/net/eth0/address |
ethtool -P |
查询网卡永久MAC地址 | 是(ethtool) | 显示Permanent address字段 | ethtool -P eth0 |
arp -a |
查询局域网内其他设备的MAC地址 | 否(默认安装) | 显示IP与MAC的映射关系 | arp -a 192.168.1.1 |
lshw |
查看硬件详细信息,含MAC地址 | 是(lshw) | 输出完整硬件配置,需过滤字段 | sudo lshw -C network |
特殊场景处理
查询所有网卡的MAC地址
结合ip
和awk
命令,可一次性输出所有接口的MAC地址:
ip link show | grep -E '^[0-9]+:' -A1 | grep ether | awk '{print $2}'
虚拟机MAC地址查询
虚拟机(如VirtualBox、VMware)的MAC地址可通过虚拟机管理器查看,也可通过Linux命令查询:
ip link show | grep -E '^(2|3):' # 虚拟网卡通常为eth1、ens33等
过滤特定状态的接口
仅查询已启用接口的MAC地址:
ip link show | grep 'state UP' -A1 | grep ether | awk '{print $2}'
相关问答FAQs
问题1:为什么执行ifconfig
或ip link
时,某些网卡的MAC地址显示为“00:00:00:00:00:00”?
解答:出现这种情况通常有以下原因:
- 网卡未启用:可通过
sudo ip link set [接口名] up
启用接口; - 驱动未正确加载:检查
dmesg | grep [接口名]
查看驱动加载日志,或尝试重新加载驱动(如sudo modprobe [驱动名]
); - 虚拟网卡配置错误:在虚拟机管理器中检查网卡模式(如NAT、桥接)是否正确;
- 硬件故障:更换网卡或主板后仍无法解决,可能是硬件损坏。
问题2:如何永久修改Linux系统的MAC地址?
解答:永久修改MAC地址需根据网络管理工具选择方法,以Ubuntu(NetworkManager)和CentOS(NetworkScripts)为例:
-
Ubuntu(NetworkManager):
- 编辑网络连接配置文件:
sudo nano /etc/NetworkManager/systemconnections/[连接名].nmconnection
- 在
[ethernet]
部分添加mac-address=新的MAC地址
(如mac-address=00:11:22:33:44:55
); - 重启NetworkManager服务:
sudo systemctl restart NetworkManager
- 编辑网络连接配置文件:
-
CentOS(NetworkScripts):
- 编辑
ifcfg-eth0
文件:sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
- 添加或修改
HWADDR=新的MAC地址
; - 重启网络服务:
sudo systemctl restart network
- 编辑
注意:修改MAC地址可能导致网络策略冲突,建议在测试环境验证后再操作。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23995.html