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:组织唯一标识符。
要更改 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
自动
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 单元
创建单元
在下面,您可以找到两个 systemd 单元的示例,用于在启动时更改 MAC 地址,一个使用 ip 设置静态 MAC,另一个使用 macchanger 分配随机 MAC 地址。 systemd network-pre.target
用于确保在网络管理器(如 Netctl 或 NetworkManager、systemd-networkd 或 dhcpcd 服务)启动之前更改 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
使脚本成为可执行文件。
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 配置以获取租约。