我正在编写一个脚本来更改本地网络上的以太网 MAC 地址。它将按如下方式工作:
- 最初 eth0 将被关闭
- MAC 将使用 ifconfig 实用程序更改
- eth0 将被启动
#!/bin/sh
sleep 5
ifconfig eth0 down
sleep 10
ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX
sleep 1
ifconfig eth0 up
如果我执行上述脚本,MAC 更改成功,面板中的网络图标也显示“正在连接”状态,并且几秒钟后eth0 再次连接到网络。然后我添加了几行来增加代码的功能 -
/sbin/ifconfig eth0| grep 'inet addr:'
ifconfig eth0 | awk '/HWaddr/ {print $5}'
ping 192.168.1.107 -c 2
上述行显示新的 IP 地址、MAC 地址,并发送 ping 请求以确认网络正常工作。但我面临的问题是,添加上述行后,我发现 ping 失败,并且面板中的网络图标显示“正在连接”状态。脚本完全执行后,几秒钟后,eth0已完全连接。 (可以ping)所以我尝试在以下行之后添加 sleep 30
ifconfig eth0 up
假设它可以解决 ping 问题。但 ping(脚本中提到的)仍然失败,并且网络在执行脚本后需要一些时间才能建立完整的连接。
我应该如何解决这个问题?
答案1
您使用的是哪个发行版?基本上,MAC 地址更改应该在启动 NetworkManager 之前完成。可能的选项有:
- 为 eth0 安装自定义 udev 规则。
- 编写一个与您的 init 系统(sysvinit、upstart、systemd 等)一起使用的脚本。
- 利用系统链接systemd 的功能。
我发现archlinux wiki 上的有用信息。你也可能对此有兴趣麦换格,这在各种发行版中都很常见。