MAC 地址欺騙

出自 Arch Linux 中文维基

這篇文章文章將會介紹幾個修改 MAC 地址的方法。

手動更改[編輯 | 編輯原始碼]

有兩種方法可以修改 MAC 地址:安裝並配置 iproute2macchanger。下面來說明一下這兩種方法。

iproute2[編輯 | 編輯原始碼]

首先,你可以用下面的命令來檢查當前的 MAC 地址

# ip link show interface

interface 是你的 網卡 的名字

我們現在要關注的是跟在「link/ether」後面的那一串帶冒號的十六進制字節。它看起來可能是這樣:

link/ether 00:1d:98:5a:d1:3a

修改 MAC 地址的第一步是禁用網卡,它可以通過下面的命令來完成:

# ip link set dev interface down

接下來,我們要開始修改我們的 MAC 地址。只要每個字節都是十六進制值就可以,但有的網絡運營商可能會拒絕為不正確的 MAC 分配 IP 地址。所以,除非你是你連接的網絡的管理員,否則你應該使用真實的 MAC 地址前綴(一般是前三個字節),剩下三個字節可以隨便設置(只要是十六進制值)。如果想了解更多內容,請訪問 Wikipedia:Organizationally unique identifier.

要更改 MAC 地址,我們要運行這個命令:

# ip link set dev interface address XX:XX:XX:XX:XX:XX

這6位 XX:XX:XX:XX:XX:XX 就是你要設置的 MAC 地址。

最後一步是重新啟用網卡,輸入這行命令:

# ip link set dev interface up

如果你想驗證你的 MAC 地址是否成功修改,只需要再次運行 ip link show interface ,然後檢查「link/ether」後面的值。如果成功修改,「link/ether」後面應該跟着你剛剛設置的 MAC 地址。

macchanger[編輯 | 編輯原始碼]

另一個方法是通過 macchanger (a.k.a., the GNU MAC Changer)。它有一些方便的功能,比如改變 MAC 地址以匹配某個運營商,或者完全隨機化地址。

官方倉庫安裝 這個包 macchanger .

由於更改 MAC 地址基於網卡,我們需要用 網卡名 來替換每行命令中的 interface

用這行命令我們可以將 MAC 地址完全隨機化:

# macchanger -r interface

要隨機化當前 MAC 地址的後三位字節 (這樣運營商會認為這個 MAC 地址是註冊過的 MAC 地址,就可以避免被斷網的風險),你可以運行這個命令

# macchanger -e interface

要把 MAC 地址改成指定的值,請運行:

# macchanger --mac=XX:XX:XX:XX:XX:XX interface

XX:XX:XX:XX:XX:XX 改成你想要的 MAC 地址。

最後,如果想把 MAC 地址恢復成出廠值,運行這個:

# macchanger -p interface
注意: 在更改 MAC 地址的時候,設備將無法使用(無論是以任何方式連接,或是試圖啟用這個設備)

自動更改[編輯 | 編輯原始碼]

systemd-networkd[編輯 | 編輯原始碼]

systemd-networkd 支持通過 link files 設置 MAC 地址(細節請查看 systemd.link(5)).

要設置一個靜態 MAC 地址,修改這個文件為:

/etc/systemd/network/00-default.link
[Match]
MACAddress=原始 MAC

[Link]
MACAddress=更改後的 MAC
NamePolicy=kernel database onboard slot path

如要在每次啟動時隨機化 MAC 地址,把 MACAddress=更改後的 MAC 改成 MACAddressPolicy=random

systemd-udevd[編輯 | 編輯原始碼]

udev 允許你創建 udev 規則 來更改 MAC 地址。使用 address 參數來用原始 MAC 地址來匹配設備,然後用 ip 命令來更改 MAC 地址:

/etc/udev/rules.d/75-mac-spoof.rules
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="XX:XX:XX:XX:XX:XX", RUN+="/usr/bin/ip link set dev %k address YY:YY:YY:YY:YY:YY"

其中,XX:XX:XX:XX:XX:XX 是原始 MAC 地址,YY:YY:YY:YY:YY:YY 是目標 MAC 地址

systemd 單元[編輯 | 編輯原始碼]

創建單元[編輯 | 編輯原始碼]

下面寫了兩個用 Systemd 來在啟動時更改 MAC 地址的例子,其中一個用 ip 來設置靜態 MAC,另一個用 macchanger 來設置隨機 MAC。systemd 的 network-pre.target 可以確保 MAC 地址在網絡管理器如 netctlNetworkManagersystemd-networkddhcpcd 啟動之前就已經更改好。

iproute2[編輯 | 編輯原始碼]

設置靜態 MAC 地址的 Systemd 單元:

/etc/systemd/system/macspoof@.service
[Unit]
Description=MAC Address Change %I
Wants=network-pre.target
Before=network-pre.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
ExecStart=/usr/bin/ip link set dev %i address 36:aa:88:c8:75:3a
ExecStart=/usr/bin/ip link set dev %i up

[Install]
WantedBy=multi-user.target
macchanger[編輯 | 編輯原始碼]

設置隨機 MAC 地址的 Systemd 單元,同時保留原始的運營商字節。請確保您已安裝macchanger:

/etc/systemd/system/macspoof@.service
[Unit]
Description=macchanger on %I
Wants=network-pre.target
Before=network-pre.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
ExecStart=/usr/bin/macchanger -e %I
Type=oneshot

[Install]
WantedBy=multi-user.target

或者用 -r 選項來使 MAC 地址完全隨機化,參見 #macchanger

啟用服務[編輯 | 編輯原始碼]

將所需的網絡接口 (如:eth0) 附加到服務名稱後面 (如macspoof@eth0.service),然後啟用服務.

重啟,或者按照適當的順序重啟依賴的服務。如果你是局域網管理員,請通過路由器檢查其中的靜態或 DHCP 地址表,驗證 MAC 是否已成功修改。

netctl 接口[編輯 | 編輯原始碼]

你可以使用 netctl hook 來在每次啟動或重啟網卡的時候運行特定命令。把 interface 替換為你的網絡接口:

/etc/netctl/interfaces/interface
#!/usr/bin/env sh
/usr/bin/macchanger -r interface

使腳本可執行:

chmod +x /etc/netctl/interfaces/interface

來源: akendo.eu

NetworkManager[編輯 | 編輯原始碼]

參見 NetworkManager#Configuring MAC address randomization.

故障排除[編輯 | 編輯原始碼]

連接到 DHCPv4 網絡失敗[編輯 | 編輯原始碼]

如果您無法連接到 DHCPv4網絡,而且您使用的是 NetworkManager 默認的 dhcpcd,你可能需要 修改 dhcpd 配置 來續租。

另見[編輯 | 編輯原始碼]