Difference between revisions of "MAC address spoofing (简体中文)"

From ArchWiki
Jump to: navigation, search
(Sync to English version.)
m (iproute2: adjust composing)
 
(9 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[cs:MAC Address Spoofing]]
 
[[en:MAC Address Spoofing]]
 
[[es:MAC Address Spoofing]]
 
[[ru:MAC Address Spoofing]]
 
 
[[Category:Networking (简体中文)]]
 
[[Category:Networking (简体中文)]]
 
[[Category:Security (简体中文)]]
 
[[Category:Security (简体中文)]]
{{Translateme (简体中文)}}
+
[[cs:MAC address spoofing]]
This article gives several methods to spoof a Media Access Control (MAC) address.
+
[[de:MAC-Adresse abfragen und setzen]]
{{Note|In the examples below is assumed the ethernet device is {{ic|eth0}}. Use {{ic|ip link}} to check your actual device name, and adjust the examples as necessary}}
+
[[en:MAC address spoofing]]
== Manually ==
+
[[es:MAC address spoofing]]
There are two methods for spoofing a MAC address using either {{Pkg|iproute2}} (installed by default) or {{Pkg|macchanger}} (available on the [[Official Repositories]]).
+
[[fr:Changement d'adresse MAC]]
 +
[[ja:MAC アドレス偽装]]
 +
[[ru:MAC address spoofing]]
 +
这篇文章文章将会介绍几个修改 MAC 地址的方法。
  
Both of them are outlined below.
+
== 手动更改 ==
  
=== Method 1: iproute2 ===
+
有两种方法可以修改 MAC 地址:[[Pacman (简体中文)#安装软件包|安装]]并配置 {{Pkg|iproute2}} 或 {{Pkg|macchanger}}。下面来说明一下这两种方法。
First, you can check your current MAC address with the command:
 
  
{{bc|# ip link show eth0}}
+
=== iproute2 ===
  
The section that interests us at the moment is the one that has "link/ether" followed by a 6-byte number. It will probably look something like this:
+
首先,你可以用下面的命令来检查当前的 MAC 地址
  
{{bc|link/ether 00:1d:98:5a:d1:3a}}
+
# ip link show ''interface''
  
The first step to spoofing the MAC address is to bring the network interface down. You must be logged in as root to do this. It can be accomplished with the command:
+
{{ic|''interface''}} 是你的 [[Network configuration (简体中文)#网络接口|网卡]] 的名字
  
{{bc|# ip link set dev eth0 down}}
+
我们现在要关注的是跟在“link/ether”后面的那一串带冒号的十六进制字节。它看起来可能是这样:
  
Next, we actually spoof our MAC. Any hexadecimal value will do, but some networks may be configured to refuse to assign IP addresses to a client whose MAC does not match up with a vendor. Therefore, unless you control the network(s) you are connecting to, it is a good idea to test this out with a known good MAC rather than randomizing it right away.
+
link/ether 00:1d:98:5a:d1:3a
  
To change the MAC, we need to run the command:
+
修改 MAC 地址的第一步是禁用网卡,它可以通过下面的命令来完成:
  
{{bc|# ip link set dev eth0 address XX:XX:XX:XX:XX:XX}}
+
# ip link set dev ''interface'' down
  
Where any 6-byte value will suffice for 'XX:XX:XX:XX:XX:XX'.
+
接下来,我们要开始修改我们的 MAC 地址。只要每个字节都是十六进制值就可以,但有的网络运营商可能会拒绝为不正确的 MAC 分配 IP 地址。所以,除非你是你连接的网络的管理员,否则你应该使用真实的 MAC 地址前缀(一般是前三个字节),剩下三个字节可以随便设置(只要是十六进制值)。如果想了解更多内容,请访问 [[Wikipedia:Organizationally unique identifier]].
  
The final step is to bring the network interface back up. This can be accomplished by running the command:
+
要更改 MAC 地址,我们要运行这个命令:
  
{{bc|# ip link set dev eth0 up}}
+
# ip link set dev ''interface'' address ''XX:XX:XX:XX:XX:XX''
  
If you want to verify that your MAC has been spoofed, simply run {{ic|ip link show eth0}} again and check the value for 'link/ether'. If it worked, 'link/ether' should be whatever address you decided to change it to.
+
这6位 {{ic|''XX:XX:XX:XX:XX:XX''}} 就是你要设置的 MAC 地址。
  
=== Method 2: macchanger ===
+
最后一步是重新启用网卡,输入这行命令:
  
Another method uses {{Pkg|macchanger}} (a.k.a., the GNU MAC Changer). It provides a variety of features such as changing the address to match a certain vendor or completely randomizing it.
+
# ip link set dev ''interface'' up
  
[[Pacman|Install]] the package {{Pkg|macchanger}} from the [[Official Repositories]].
+
如果你想验证你的 MAC 地址是否成功修改,只需要再次运行 {{ic|ip link show ''interface''}} ,然后检查“link/ether”后面的值。如果成功修改,“link/ether”后面应该跟着你刚刚设置的 MAC 地址。
  
After this, the MAC can be spoofed with a random address. The syntax is {{ic|macchanger -r ''<device>''}}.
+
=== macchanger ===
  
Here is an example command for spoofing the MAC address of a device named eth0.
+
另一个方法是通过 {{Pkg|macchanger}} (a.k.a., the GNU MAC Changer)。它有一些方便的功能,比如改变 MAC 地址以匹配某个运营商,或者完全随机化地址。
  
{{bc|# macchanger -r eth0}}
+
从[[Official repositories (简体中文)|官方仓库]]里[[Pacman (简体中文)#安装软件包|安装]] 这个包 {{Pkg|macchanger}} .
  
To randomize all of the address except for the vendor bytes (that is, so that if the MAC address was checked it would still register as being from the same vendor), you would run the command:
+
由于更改 MAC 地址基于网卡,我们需要用 [[Network configuration (简体中文)#网络接口|网卡名]] 来替换每行命令中的 {{ic|''interface''}} 。
  
{{bc|# macchanger -e eth0}}
+
用这行命令我们可以将 MAC 地址完全随机化:
  
Finally, to change the MAC address to a specific value, you would run:
+
# macchanger -r ''interface''
  
{{bc|1=# macchanger --mac=XX:XX:XX:XX:XX:XX}}
+
要随机化当前 MAC 地址的后三位字节 (这样运营商会认为这个 MAC 地址是注册过的 MAC 地址,就可以避免被断网的风险),你可以运行这个命令
  
Where {{ic|XX:XX:XX:XX:XX:XX}} is the MAC you wish to change to.
+
# macchanger -e ''interface''
  
{{Note|A device cannot be in use (connected in any way or with its interface up) while the MAC address is being changed.}}
+
要把 MAC 地址改成指定的值,请运行:
  
== Automatically ==
+
# macchanger --mac=''XX:XX:XX:XX:XX:XX'' ''interface''
  
=== netcfg ===
+
{{ic|''XX:XX:XX:XX:XX:XX''}} 改成你想要的 MAC 地址。
[[Pacman|Install]] the package {{Pkg|macchanger}} from the [[Official Repositories]]. Read the [[#Method 2: macchanger]] method for more information.
 
  
Put the following line in your [[netcfg]] profile to have it spoof your MAC address when it's started:
+
最后,如果想把 MAC 地址恢复成出厂值,运行这个:
  
{{bc|1=PRE_UP='macchanger -e wlan0'}}
+
# macchanger -p ''interface''
  
You may have to replace {{ic|wlan0}} with your interface name.
+
{{注意|在更改 MAC 地址的时候,设备将无法使用(无论是以任何方式连接,或是试图启用这个设备)}}
  
=== Systemd Unit ===
+
== 自动更改 ==
  
{{hc|/etc/systemd/system/macspoof@.service|
+
=== systemd-networkd ===
 +
 
 +
[[systemd-networkd]] 支持通过 [[systemd-networkd#link files|link files]] 设置 MAC 地址(细节请查看 {{man|5|systemd.link}}).
 +
 
 +
要设置一个静态 MAC 地址,修改这个文件为:
 +
 
 +
{{hc|/etc/systemd/network/00-default.link|2=
 +
[Match]
 +
MACAddress=''原始 MAC''
 +
 
 +
[Link]
 +
MACAddress=''更改后的 MAC''
 +
NamePolicy=kernel database onboard slot path
 +
}}
 +
 
 +
如要在每次启动时随机化 MAC 地址,把 {{ic|1=MACAddress=''更改后的 MAC''}} 改成 {{ic|1=MACAddressPolicy=random}}。
 +
 
 +
=== systemd-udevd ===
 +
 
 +
[[udev (简体中文)]] 允许你创建 [[udev (简体中文)#udev 规则|udev 规则]] 来更改 MAC 地址。使用 {{ic|address}} 参数来用原始 MAC 地址来匹配设备,然后用 ''ip'' 命令来更改 MAC 地址:
 +
 
 +
{{hc|/etc/udev/rules.d/75-mac-spoof.rules|2=
 +
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"
 +
}}
 +
 
 +
其中,{{ic|XX:XX:XX:XX:XX:XX}} 是原始 MAC 地址,{{ic|YY:YY:YY:YY:YY:YY}} 是目标 MAC 地址
 +
 
 +
=== systemd 单元 ===
 +
 
 +
==== 创建单元 ====
 +
 
 +
下面写了两个用 [[Systemd (简体中文)]] 来在启动时更改 MAC 地址的例子,其中一个用 ''ip'' 来设置静态 MAC,另一个用 ''macchanger'' 来设置随机 MAC。systemd 的 {{ic|network-pre.target}} 可以确保 MAC 地址在网络管理器如 [[netctl (简体中文)]]、[[NetworkManager (简体中文)]]、[[systemd-networkd]] 或 [[dhcpcd (简体中文)]] 启动之前就已经更改好。
 +
 
 +
===== iproute2 =====
 +
 
 +
设置静态 MAC 地址的 [[Systemd (简体中文)]] 单元:
 +
 
 +
{{hc|/etc/systemd/system/macspoof@.service|<nowiki>
 +
[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
 +
</nowiki>}}
 +
 
 +
===== macchanger =====
 +
 
 +
设置随机 MAC 地址的 [[Systemd (简体中文)]] 单元,同时保留原始的运营商字节。请确保您已[[Pacman (简体中文)#安装软件包|安装]]了 {{Pkg|macchanger}}:
 +
 
 +
{{hc|/etc/systemd/system/macspoof@.service|<nowiki>
 
[Unit]
 
[Unit]
Description&#61;MAC address change %I
+
Description=macchanger on %I
Before&#61;dhcpcd@%i.service
+
Wants=network-pre.target
 +
Before=network-pre.target
 +
BindsTo=sys-subsystem-net-devices-%i.device
 +
After=sys-subsystem-net-devices-%i.device
  
 
[Service]
 
[Service]
Type&#61;oneshot
+
ExecStart=/usr/bin/macchanger -e %I
ExecStart&#61;/usr/sbin/ip link set dev %i address 36:aa:88:c8:75:3a
+
Type=oneshot
ExecStart&#61;/usr/sbin/ip link set dev %i up
 
  
 
[Install]
 
[Install]
WantedBy&#61;network.target}}
+
WantedBy=multi-user.target
You may have to edit this file if you do not use dhcpcd.
+
</nowiki>}}
Note: This works without netcfg. If you are using netcfg, see above.
+
 
 +
或者用 {{ic|-r}} 选项来使 MAC 地址完全随机化,参见 [[#macchanger]]。
 +
 
 +
==== 启用服务 ====
 +
 
 +
将所需的网络接口 (如:{{ic|eth0}}) 附加到服务名称后面 (如{{ic|macspoof@eth0.service}}),然后[[Systemd_(简体中文)#使用单元|启用]]服务.
 +
 
 +
重启,或者按照适当的顺序重启依赖的服务。如果你是局域网管理员,请通过路由器检查其中的静态或 DHCP 地址表,验证 MAC 是否已成功修改。
 +
 
 +
=== netctl 接口 ===
 +
 
 +
你可以使用 [[Netctl#Using_hooks|netctl hook]] 来在每次启动或重启网卡的时候运行特定命令。把 {{ic|''interface''}} 替换为你的[[Network configuration (简体中文)#网络接口|网络接口]]:
 +
 
 +
{{hc|/etc/netctl/interfaces/''interface''|2=
 +
#!/usr/bin/env sh
 +
/usr/bin/macchanger -r ''interface''}}
 +
 
 +
使脚本可执行:
 +
 
 +
chmod +x /etc/netctl/interfaces/''interface''
 +
 
 +
来源: [https://blog.akendo.eu/archlinuxrandom-mac-address-for-new-wireless-connections/  akendo.eu]
 +
 
 +
=== NetworkManager ===
 +
 
 +
参见 [[NetworkManager#Configuring MAC Address Randomization]].
 +
 
 +
== 故障排除 ==
 +
 
 +
=== 连接到 DHCPv4 网络失败 ===
 +
 
 +
如果您无法连接到 DHCPv4网络,而且您使用的是 NetworkManager 默认的 dhcpcd,你可能需要 [[Dhcpcd_(简体中文)#客户端 ID|修改 dhcpd 配置]] 来续租。
  
== See also ==
+
== 另见 ==
  
* [http://www.alobbs.com/macchanger macchanger project page]   
+
* [[Wikipedia:MAC spoofing]]
* [http://www.debianadmin.com/change-your-network-card-mac-media-access-control-address.html Article on DebianAdmin] with more macchanger options.
+
* [https://github.com/alobbs/macchanger Macchanger GitHub page]   
* [http://wiki.gotux.net/downloads/smac SMAC] Arch Linux MAC Address Spoofer
+
* [http://www.debianadmin.com/change-your-network-card-mac-media-access-control-address.html DebianAdmin 上的文章] with more ''macchanger'' options

Latest revision as of 06:51, 11 May 2018

这篇文章文章将会介绍几个修改 MAC 地址的方法。

手动更改

有两种方法可以修改 MAC 地址:安装并配置 iproute2macchanger。下面来说明一下这两种方法。

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
注意: 在更改 MAC 地址的时候,设备将无法使用(无论是以任何方式连接,或是试图启用这个设备)

自动更改

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-networkddhcpcd (简体中文) 启动之前就已经更改好。

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 配置 来续租。

另见