# Linux系統如何獲取默認MAC地址
## 前言
MAC地址(Media Access Control Address)是網絡設備的唯一硬件標識符,由48位二進制數組成,通常表示為12個十六進制字符(如`00:1A:2B:3C:4D:5E`)。在Linux系統中,獲取MAC地址是網絡配置、設備管理和故障排查中的常見操作。本文將詳細介紹多種獲取默認MAC地址的方法,并深入解析相關技術細節。
---
## 一、MAC地址基礎概念
### 1. MAC地址的結構
- **廠商標識符**:前24位(OUI)由IEEE分配給設備制造商
- **設備標識符**:后24位由廠商自行分配
- **地址類型**:
- 單播(Unicast)第8位為0
- 多播(Multicast)第8位為1
- 本地管理(LAA)第2位為1
### 2. 默認MAC地址的特點
- 燒錄在網卡ROM中
- 可通過軟件臨時修改(臨時MAC)
- 部分虛擬化設備會動態生成
---
## 二、命令行獲取方法
### 1. ifconfig命令(傳統方式)
```bash
ifconfig -a
輸出示例:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:1a:2b:3c:4d:5e txqueuelen 1000 (Ethernet)
注意:現代Linux系統可能需安裝net-tools
包
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
ethtool -P eth0
輸出:
Permanent address: 00:1a:2b:3c:4d:5e
cat /sys/class/net/eth0/address
nmcli device show eth0 | grep GENERAL.HWADDR
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <net/if.h>
int main() {
struct ifreq ifr;
int fd = socket(AF_INET, SOCK_DGRAM, 0);
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
ioctl(fd, SIOCGIFHWADDR, &ifr);
unsigned char *mac = (unsigned char *)ifr.ifr_hwaddr.sa_data;
printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
close(fd);
return 0;
}
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.encode()[:15]))
return ':'.join(f'{b:02x}' for b in info[18:24])
print(get_mac())
ls /sys/class/net/
使用ip -br link
可簡化輸出:
eth0 UP 00:1a:2b:3c:4d:5e <BROADCAST,MULTICAST,UP,LOWER_UP>
wlan0 DOWN 00:12:34:56:78:90 <NO-CARRIER,BROADCAST,MULTICAST,UP>
52:54:00
開頭某些ISP會綁定MAC地址,可通過修改/etc/network/interfaces
實現克?。?/p>
iface eth0 inet dhcp
hwaddress ether 00:1a:2b:3c:4d:5e
sudo ip link set dev eth0 address 00:11:22:33:44:55
創建/etc/udev/rules.d/75-mac-address.rules
:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="原MAC", ATTR{address}=="新MAC"
nmcli connection modify "有線連接1" 802-3-ethernet.cloned-mac-address 00:11:22:33:44:55
MAC地址欺騙防護:
arpwatch
監控ARP變化隱私擴展功能: IPv6會使用隨機MAC地址,可通過以下命令禁用:
sysctl -w net.ipv6.conf.all.use_tempaddr=0
審計日志: 記錄MAC地址變更事件:
auditctl -w /sys/class/net/ -p wa -k network_mac_change
A:可能原因包括: - 臨時MAC地址修改 - 網絡接口卡(NIC)更換 - 虛擬網卡動態生成
sudo ip link set dev eth0 address $(cat /sys/class/net/eth0/address)
FF:FF:FF:FF:FF:FF
是廣播地址00:00:00:00:00:00
通常表示驅動未正確加載掌握Linux系統下MAC地址的獲取方法,是網絡管理和系統維護的重要基礎技能。本文介紹了從基礎命令到編程實現的多種方案,并涵蓋了虛擬化環境、安全配置等進階內容。建議在實際工作中:
1. 優先使用ip
命令替代已淘汰的ifconfig
2. 關鍵系統記錄MAC地址變更日志
3. 在云計算環境中注意虛擬MAC的特殊性
附錄: - IEEE OUI查詢:https://standards.ieee.org/products-services/regauth/oui/ - Linux網絡配置文檔:https://www.kernel.org/doc/html/latest/networking/ “`
注:本文實際約2000字,可根據需要增減具體命令示例或擴展編程實現部分以達到精確字數要求。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。