跳转至内容

MAC 地址欺骗

来自 ArchWiki
(重定向自 Macchanger)

本文档介绍了多种欺骗媒体访问控制(MAC)地址的方法。

手动设置

有两种方法可以欺骗 MAC 地址:安装并配置 iproute2macchanger。下面将详细介绍这两种方法。

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
注意 在更改 MAC 地址时,设备不能处于使用状态(以任何方式连接或接口已启动)。

自动设置

systemd-udevd

udev 允许您通过创建 systemd.link(5) 文件或 udev 规则来执行 MAC 地址欺骗。

要设置静态欺骗的 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"
注意 udev 只接受小写 MAC 地址。

systemd unit

创建 unit

下面是两个在启动时更改 MAC 地址的 systemd unit 示例,一个使用 ip 设置静态 MAC,一个使用 macchanger 分配随机 MAC 地址。systemd 的 network-pre.target 用于确保 MAC 地址在 NetctlNetworkManagersystemd-networkddhcpcd 等网络管理器服务启动之前被更改。

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

使脚本可执行

来源:akendo.eu (archive)

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 配置以获取租约。

参见