MAC 地址欺騙
這篇文章文章將會介紹幾個修改 MAC 地址的方法。
手動更改[編輯 | 編輯原始碼]
有兩種方法可以修改 MAC 地址:安裝並配置 iproute2包 或 macchanger包。下面來說明一下這兩種方法。
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
自動更改[編輯 | 編輯原始碼]
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 地址在網絡管理器如 netctl、NetworkManager、systemd-networkd 或 dhcpcd 啟動之前就已經更改好。
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 配置來續租。
另見[編輯 | 編輯原始碼]
- Wikipedia:MAC spoofing
- Macchanger GitHub page
- DebianAdmin 上的文章 with more macchanger options