溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux下怎么讀取MAC地址

發布時間:2022-01-26 09:10:28 來源:億速云 閱讀:310 作者:小新 欄目:開發技術
# 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地址。

1.2 指定網卡查詢

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

2.2 精確提取MAC地址

ip link show eth0 | awk '/link\/ether/{print $2}'

三、通過/sys文件系統

3.1 直接讀取設備文件

Linux內核通過sysfs虛擬文件系統暴露硬件信息:

cat /sys/class/net/eth0/address

輸出示例:

00:1a:2b:3c:4d:5e

3.2 批量獲取所有接口MAC

ls /sys/class/net/ | while read dev; do echo -n "$dev: "; cat /sys/class/net/$dev/address; done

四、使用nmcli(NetworkManager)

4.1 查詢已連接設備

適用于使用NetworkManager管理的系統:

nmcli device show eth0 | grep GENERAL.HWADDR

輸出:

GENERAL.HWADDR:                         00:1A:2B:3C:4D:5E

4.2 列出所有設備MAC

nmcli device show | awk '/GENERAL.DEVICE:|GENERAL.HWADDR/'

五、特殊場景處理

5.1 虛擬接口過濾

排除lo、docker等虛擬接口:

ip link | awk '/link\/ether/ && !/docker|virbr|veth/{print $2}'

5.2 無線網卡MAC地址

iw dev wlan0 info | grep addr

5.3 USB網卡識別

lsusb -tv | grep -i ethernet
dmesg | grep -i 'usb.*mac'

六、編程語言實現

6.1 Python示例

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())

6.2 Bash腳本

#!/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"

七、MAC地址修改與欺騙

7.1 臨時修改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

7.2 永久修改(Debian系)

編輯/etc/network/interfaces

auto eth0
iface eth0 inet dhcp
    hwaddress ether 00:11:22:33:44:55

警告:修改MAC地址可能違反網絡策略,操作前需獲得授權。


八、MAC地址的應用場景

  1. 設備識別:路由器DHCP綁定特定設備
  2. 網絡準入控制:企業網絡MAC白名單
  3. 流量管理:QoS策略基于MAC地址實施
  4. 虛擬化環境:VMware/KVM虛擬機MAC分配
  5. 安全審計:檢測網絡中的異常設備

九、常見問題解答

Q1: 為什么ifconfig不顯示MAC地址?

  • 網卡未啟用:sudo ip link set eth0 up
  • 驅動未加載:檢查dmesg | grep eth0

Q2: 如何判斷MAC地址是否被偽造?

  • 對比ARP表:arp -an
  • 檢查廠商前綴:前3字節對應OUI(如00:16:3E屬于VMware)

Q3: 虛擬機MAC地址有何特點?

  • Xen:00:16:3E開頭
  • VMware:00:0C:2900:50:56開頭

結語

掌握Linux下讀取MAC地址的多種方法,能夠靈活應對不同場景需求。建議優先使用ip link/sys文件系統等現代工具,同時注意MAC地址相關的安全策略。如需進一步自動化管理,可結合腳本或編程接口實現。

擴展閱讀: - IEEE OUI數據庫:https://standards.ieee.org/products-services/regauth/oui/ - macchanger工具:批量修改MAC地址 - RFC 7042:MAC地址行為準則 “`

(全文約1850字,實際字數可能因顯示格式略有差異)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女