非硬件永久修改ddwrt的MAC地址

Written .

最近一直在蹭网用,昨天犯了错误。下载东西可能被发现了,封了我路由的MAC地址。咋办WEB里修改MAC地址发现路由能上了,但是桥接的无线全上不去了。只好上网搜索,特别发现此篇文章珍藏之。 修改 cfe 的方法有两种,一种是利用 JTAG 线,这需要一定的硬件知识,而且要有专门的 JTAG 线和电脑上的并口配合使用才能完成,比较复杂。还有一种是利用 Telnet 登陆路由器后,用路由器内的 mtd 设备来完成。在这里我就说一下第二种方法。

  1. 用 Telnet 命令登陆路由器(要注意一点,用户名一定要写 root,哪怕你自定义过用户名,但在这里也还是要用 root 才可以)。

  2. 输入:cat /proc/mtd ,一般会返回如下信息: dev: size erasesize name mtd0: 00040000 00010000 "cfe" mtd1: 003b0000 00010000 "linux" mtd2: 002bd000 00010000 "rootfs" mtd3: 00010000 00010000 "nvram" mtd4: 00010000 00010000 "ddwrt"

从返回的信息中,我们可以看到 cfe 其实就是放在 mtd0 区内的。

  1. 现在我们先把 cfe 备份出来,使用命令:dd if=/dev/mtd/0 of=/tmp/cfe.bin ,一般返回如下信息: 512+0 records in 512+0 records out

这样就把路由 FLASH 中的 cfe 备份到了 /tmp/cfe.bin 中去了。

  1. 获取现在路由的 MAC 地址,这个方法有很多种了,你可以访问一下 http 方式的管理页,然后把 Lan MAC 记下来(必须是 LAN MAC ,千万别记成 WAN MAC 或者 WLAN MAC 了),也可以用命令: ifconfig eth0 来获取(命令中最后一个字符是数字 0 ,别输入成字母 0 了) 。 假设这里获取到的 MAC 地址是 00:16:11:17:91:95 。

  2. 用 sed 命令把 cfe 中的 MAC 地址改掉,假设改成 00:16:11:17:81:95,改好后的 cfe 保存到 cfe.new 文件中。命令格式如下: sed "s/00:16:11:17:91:95/00:16:11:17:81:95/g" /tmp/cfe.bin > /tmp/cfe.new 由于该命令是没有回显的,所以只要运行结束显示提示符,就可以了。

  3. 最后用 mtd 命令把新的 cfe 内容写回 cfe 。 mtd write /tmp/cfe.new cfe 如果有提示错误,可以改用以下2条命令进行: mtd unlock cfe mtd write -f /tmp/cfe.new cfe

如果提示信息是类似下面的这行,就说明更新完毕: Writing from /tmp/cfe.bin to cfe ... [w]

  1. 完成,您可以在 http 方式的管理页面中,选择恢复出厂默认设置一下,也可以按路由器背后的 RESET 强制恢复。现在路由器的 MAC 地址已经是新的了。

可能有人会问,你只改了 LAN MAC 地址,那路由器还有 WAN MAC 和 WLAN MAC 呢,这两个又怎么改?其实这两个根本不用改的,如果打开 cfe 看的话也可以发现,里面根本没有这两个 MAC 地址,只有 LAN MAC 地址的。那这两个 MAC 地址怎么生成呢?其实很简单,cfe 会自动用 LAN MAC 地址 + 1 和 +2 来自动生成 WAN MAC 和 WLAN MAC 地址的,所以你改掉了 LAN MAC 就可以了。

comments powered by Disqus