MAC 地址欺骗

来自 ArchWiki

本文介绍了多种欺骗媒体访问控制 (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:组织唯一标识符

要更改 MAC,我们需要运行以下命令

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

其中任何 6 字节的值都足以满足 XX:XX:XX:XX:XX:XX

最后一步是重新启动网络接口。这可以通过运行以下命令来完成

# 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 地址欺骗。

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"
注意: udev 仅接受小写 MAC 地址。

systemd 单元

创建单元

下面您将找到两个 systemd 单元的示例,用于在启动时更改 MAC 地址,一个使用 ip 设置静态 MAC,另一个使用 macchanger 分配随机 MAC 地址。 systemd network-pre.target 用于确保在 NetctlNetworkManagersystemd-networkddhcpcd 服务启动之前更改 MAC。

iproute2

systemd 单元设置预定义的 MAC 地址

/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

systemd 单元设置随机地址,同时保留原始 NIC 供应商字节。确保 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 挂钩在每次为特定网络接口重新/启动 netctl 配置文件时运行命令。相应地替换 interface

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

使脚本成为可执行文件

来源:akendo.eu (存档)

NetworkManager

请参阅 NetworkManager#配置 MAC 地址随机化

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(NetworkManager 的默认设置),您可能需要修改 dhcpcd 配置以获取租约。

参见