MAC 地址欺骗
本文档介绍了多种欺骗媒体访问控制(MAC)地址的方法。
手动设置
有两种方法可以欺骗 MAC 地址:安装并配置 iproute2 或 macchanger。下面将详细介绍这两种方法。
iproute2
首先,您可以使用以下命令查看当前的 MAC 地址:
# ip link show interface
其中 interface 是您的网络接口名称。
目前我们感兴趣的部分是“link/ether”后跟一个 6 字节的数字。它可能看起来像这样:
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
其中 XX:XX:XX:XX:XX:XX 可以是任何 6 字节的值。
最后一步是重新启动网络接口。可以使用以下命令完成:
# ip link set dev interface up
如果您想验证 MAC 地址是否已欺骗,只需再次运行 ip link show interface 并检查“link/ether”的值。如果成功,则“link/ether”应为您更改为的地址。
macchanger
另一种方法是使用 macchanger(又名 GNU MAC Changer)。它提供了多种功能,例如将地址更改为匹配特定供应商或完全随机化。
安装 macchanger 包。
欺骗是按接口进行的,在每个后续命令中指定 网络接口名称作为 interface。
可以使用完全随机的地址来欺骗 MAC 地址:
# macchanger -r interface
要仅随机化当前 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-udevd
udev 允许您通过创建 systemd.link(5) 文件或 udev 规则来执行 MAC 地址欺骗。
systemd.link
要设置静态欺骗的 MAC 地址:
/etc/systemd/network/01-mac.link
[Match] PermanentMACAddress=original MAC [Link] MACAddress=spoofed MAC
要在每次启动时随机化 MAC 地址,请将 MACAddressPolicy=random 设置为 MACAddress=spoofed MAC。
udev 规则
使用 address 属性通过原始 MAC 地址匹配正确的设备,并使用 ip 命令进行更改:
/etc/udev/rules.d/81-mac-spoof.rules
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="original MAC", RUN+="/usr/bin/ip link set dev $name address spoofed MAC"
systemd unit
创建 unit
下面是两个在启动时更改 MAC 地址的 systemd unit 示例,一个使用 ip 设置静态 MAC,一个使用 macchanger 分配随机 MAC 地址。systemd 的 network-pre.target 用于确保 MAC 地址在 Netctl 或 NetworkManager、systemd-networkd 或 dhcpcd 等网络管理器服务启动之前被更改。
iproute2
设置预定义 MAC 地址的 systemd unit:
/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
设置随机地址但保留原始 NIC 供应商字节的 systemd unit。请确保 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 选项设置完全随机的地址,参见 #macchanger。
启用服务
将所需的网络接口添加到服务名称后(例如 eth0),然后启用该服务(例如 macspoof@eth0.service)。
重新启动,或者按正确的顺序停止并启动先决和必需的服务。如果您控制自己的网络,请检查路由器中的静态或 DHCP 地址表,以验证欺骗的 MAC 地址是否已被路由器识别。
netctl 接口
您可以使用 netctl hook 在每次重新/启动特定网络接口的 netctl 配置文件时运行一个命令。请相应地替换 interface。
/etc/netctl/interfaces/interface
#!/usr/bin/env sh /usr/bin/macchanger -r interface
使脚本可执行。
NetworkManager
参见 NetworkManager#Configuring MAC address randomization。
wpa_supplicant
wpa_supplicant 可以为每个 ESS 连接(AP)使用随机 MAC 地址(有关详细信息,请参见 [1])。
将此添加到您的配置中:
/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
mac_addr=1 preassoc_mac_addr=1 gas_rand_mac_addr=1
iwd
在 iwd 启动时随机化 MAC 地址(有关详细信息,请参见 iwd.config(5))。
/etc/iwd/main.conf
[General] AddressRandomization=once AddressRandomizationRange=nic
指定 AddressRandomizationRange 可以控制地址的哪个部分被随机化。如果设置为 nic,则只随机化 NIC 特定字节(最后三个字节)。网络接口的永久 MAC 地址用于前 3 个字节。如果设置为 full,则随机化地址的所有六个字节。
故障排除
连接到 DHCPv4 网络失败
如果您无法连接到 DHCPv4 网络并且正在使用 dhcpcd,您可能需要修改 dhcpcd 配置以获取租约。
参见
- Wikipedia:MAC spoofing
- Macchanger GitHub 页面
- DebianAdmin 上的文章,包含更多 macchanger 选项