为什么 D-Link DIR-825 不接受 MAC 地址?

Sam*_*mir 6 router wireless-networking wireless-router

我试图在 DIR-825 中为我的台式 PC 保留一个 IP 地址,当我输入所有详细信息并按“保存”按钮时,它告诉我 MAC 地址无效。

我的 MAC 地址看起来像1C:BD:B9:xx:xx:xx.

无效的mac地址

我可以从我的其他联网设备添加和保存其他 MAC 地址,但不是这个。所以我尝试更改格式以包含破折号而不是分号,但它仍然说无效。然后我注意到我的大多数其他东西都有一个以 00 开头的 MAC 地址,所以我尝试将 01 更改为 00 并且它被接受了。

是的,MAC地址被接受了,很可爱,但当然这是错误的MAC地址。为什么它会接受以 00 开头的地址,而不接受以 01 开头的地址?

(有趣的是:前3个字节,包括违规部分,属于D-link)

我刷了两次FW,从2.01EU升级到2.01EU,然后升级到2.06EU,但没有解决问题,路由器仍然记得旧设置,即使它们没有出现在界面中。

使用任意固件刷新路由器后,Web 界面显示为空,但路由器的行为就像它仍然具有相同的配置,即使说明说刷新程序将删除我的设置和数据。

即使我重置为出厂默认设置,它仍然记得设置。

出厂默认值

因此,我最终执行了“30/30/30 程序”,即按住 RESET 按钮 30 秒,同时关闭电源并再次打开。这将打开“固件更新系统”。我选择我的固件文件并将其发送到路由器进行闪烁。

闪烁完成,设置终于全部消失,我能够开始一步一步地创建新设置。然后我来到了IP预留列表,我又卡住了。

  1. 为什么会发生这种情况,为什么不接受 MAC 地址?有解释吗?

  2. 我如何强制它接受该死的地址?

更新:

应该有一个解决这个问题的方法,您可以check_mac在客户端覆盖使用以下代码之一调用的函数。

Code 1:
javascript:alert(check_mac=function (){return true;});

Code 2:
javascript:(function(){ window['check_mac'] = function() { return true; } })();
Run Code Online (Sandbox Code Playgroud)

我尝试了这两个,但没有用。无论如何,您如何执行此代码?仅输入它并从浏览器中按 Enter 就足够了吗?

来源:

我向 D-Link 询问了这个问题,他们给我发了一些 Beta FW 版本 2.08EU,我认为是 beta 4。据我所知,他们甚至还没有发布 2.06EU 的正式最终版本。这个是通过路由器本身提供的,但不能从许多本地化的 D-Link 网站中的任何一个或其全球公司网站下载。然而他们正在开发 2.08?? 没意义...

以下是 MAC 预留功能的源代码摘录。

function save_reserved(){
    var index = 0;
    var ip = get_by_id("lan_ipaddr").value;
    var mask = get_by_id("lan_netmask").value;
    var reserved_name = get_by_id("reserved_name").value;
    var reserved_ip = get_by_id("reserved_ip").value;
    var reserved_mac = get_by_id("reserved_mac").value;
    var start_ip = get_by_id("dhcpd_start").value;
    var end_ip = get_by_id("dhcpd_end").value;

    var ip_addr_msg = replace_msg(all_ip_addr_msg,_ipaddr);
    var Res_ip_addr_msg = replace_msg(all_ip_addr_msg,"Reservation IP");
    var start_ip_addr_msg = replace_msg(all_ip_addr_msg,"Start IP address");
    var end_ip_addr_msg = replace_msg(all_ip_addr_msg,"End IP address");

    var temp_ip_obj = new addr_obj(ip.split("."), ip_addr_msg, false, false);
    var temp_mask_obj = new addr_obj(mask.split("."), subnet_mask_msg, false, false);
    var temp_res_ip_obj = new addr_obj(reserved_ip.split("."), Res_ip_addr_msg, false, false);
    var start_obj = new addr_obj(start_ip.split("."), start_ip_addr_msg, false, false);
    var end_obj = new addr_obj(end_ip.split("."), end_ip_addr_msg, false, false);

    if(reserved_name == ""){
        alert(GW_INET_ACL_NAME_INVALID);
        return false;
    }else if(!check_LAN_ip(temp_ip_obj.addr, temp_res_ip_obj.addr, TEXT033)){
        return false;
    }else if(!check_address(temp_res_ip_obj, temp_mask_obj, temp_ip_obj)){
        return false;
    }else if (!check_domain(temp_res_ip_obj, temp_mask_obj, temp_ip_obj)){
        alert(TEXT033+" " + reserved_ip + " "+GW_DHCP_SERVER_RESERVED_IP_IN_POOL_INVALID_a);

        return false;
    }else if (!check_mac(reserved_mac)){
        alert(KR3);
        return false;
    }

    if (check_resip_order(temp_res_ip_obj,start_obj, end_obj)){
            alert(TEXT033+" " + reserved_ip + " "+GW_DHCP_SERVER_RESERVED_IP_IN_POOL_INVALID_a);
            return false;
        }
    //check same ip/mac start   
        var index = parseInt(get_by_id("edit").value);
        var edit_tmp = get_by_id("edit").value;
        for(m = 1; m < DataArray.length; m++){
                        if (m==index){
                 continue;
                }else{
                if(get_by_id("reserved_name").value.length > 0){
                    if((get_by_id("reserved_name").value == DataArray[m].Name)){
                        alert(sp_name+" ("+ get_by_id("reserved_name").value +") "+sp_alreadyused); 
                        return false;
                    }
                }
                if(reserved_ip.length > 0){
                    if((reserved_ip == DataArray[m].IP)){
                    alert(TEXT033+" ("+ reserved_ip +") "+sp_alreadyused);  
                        return false;
                    }
                }
                if(reserved_mac.length > 0){
                    if((reserved_mac == DataArray[m].MAC)){
                        alert(GW_DHCP_SERVER_RESERVED_MAC_UNIQUENESS_INVALID_a+" "+ reserved_mac +" "+GW_DHCP_SERVER_RESERVED_MAC_UNIQUENESS_INVALID_b);
                        return false;
                    }
                }

    }
        }
    //check same ip/mac end

    update_DataArray();

    var is_enable = "";
    if(get_by_id("edit").value == "-1"){     //add
        var i = get_by_id("max_row").value;
        var tb1 = get_by_id("table1"); 
        var oTr = tb1.insertRow(-1);
        var oTd1 = oTr.insertCell(-1);
        var oTd2 = oTr.insertCell(-1);
        var oTd3 = oTr.insertCell(-1);
        var oTd4 = oTr.insertCell(-1);
        var oTd5 = oTr.insertCell(-1);
        var oTd6 = oTr.insertCell(-1);

        if(parseInt(DataArray[i].Enable)){
            is_enable = "checked";
        }else{
            is_enable = "";
        }
        oTd1.innerHTML = "<center><input type=checkbox id=r_enable" + i + " name=r_enable" + i + " onClick='set_reserved_enable(" + i + ")' " + is_enable + "></center>"
        oTd2.innerHTML = "<center>" + DataArray[i].Name +"</center>"
        oTd3.innerHTML = "<center>" + DataArray[i].MAC +"</center>"
        oTd4.innerHTML = "<center>" + DataArray[i].IP +"</center>"
        oTd5.innerHTML = '<center><a href=javascript:edit_row('+ i +')\><img src=edit.jpg border=0 alt='+_edit+'></a></center>';
        oTd6.innerHTML = '<center><a href=javascript:del_row('+ i +')\><img src=delete.jpg  border=0 alt='+_delete+'></a></center>';
    }else{                                      //update        
        var i = parseInt(get_by_id("edit").value);
        if(parseInt(DataArray[i].Enable)){
            is_enable = "checked";
        }else{
            is_enable = "";
        }
        get_by_id("table1").rows[i].cells[0].innerHTML = "<center><input type=checkbox id=r_enable" + i + " name=r_enable" + i + " onClick='set_reserved_enable(" + i + ")' " + is_enable + "></center>"
        get_by_id("table1").rows[i].cells[1].innerHTML = "<center>" + DataArray[i].Name +"</center>"
        get_by_id("table1").rows[i].cells[2].innerHTML = "<center>" + DataArray[i].MAC +"</center>"
        get_by_id("table1").rows[i].cells[3].innerHTML = "<center>" + DataArray[i].IP +"</center>"
        get_by_id("table1").rows[i].cells[4].innerHTML = '<center><a href=javascript:edit_row('+ i +')\><img src=edit.jpg border=0 alt='+_edit+'></a></center>';
        get_by_id("table1").rows[i].cells[5].innerHTML = '<center><a href=javascript:del_row('+ i +')\><img src=delete.jpg  border=0 alt='+_delete+'></a></center>';
    }
    clear_reserved();
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*mir 1

问题解决了!我用 2.08EU beta 4 刷新了它。这解决了我遇到的某些 MAC 地址“无效”的问题。但它并没有解决最初的问题,而且还引入了其他问题。我对此并不感到惊讶,因为我已经使用该设备以及其他 D-Link 设备超过 2 年了。

事情总是这样的,我开始解决一个小问题,结果却花了晚上和周末的时间来闪烁,并通常破解设备以使事情正常进行。很长一段时间以来一切都运行得很顺利,但这款路由器最近表现得尤其糟糕。就好像它有自己的想法一样。这是一个永无止境的迷宫。

这是 MAC“无效”问题的解决方案。

  1. 从 D-Link 下载 2.08EU beta 4(备注 1、备注 2)。

  2. 解压二进制文件(备注2)。

  3. 连接计算机(备注2)。

  4. 将计算机设置为静态IP(备注3)。

  5. 打开网络浏览器。

  6. 转到路由器并执行 30/30/30 程序(备注 4)。

  7. 到电脑上,在浏览器中访问192.168.0.1。您将看到“d-link固件升级系统”页面。选择新的二进制文件(备注 5)。

  8. 单击“发送”按钮一次并等待至少 5 分钟(备注 6)。

  9. 现在在浏览器中打开一个新选项卡或打开一个新的浏览器窗口并转到 192.168.0.1,您应该会看到常规的 Web 界面。

我对这些步骤做了一些评论。如果您知道自己在做什么,则无需阅读它们。

备注开始

备注1:文件名为DIR825B1_FW208EUb04_beta.zip. 该文件尚未公开。因此,请给他们打电话或发电子邮件询问。请注意,此文件仅适用于欧洲版本的 DIR-825(硬件修订版 B1)。

备注 2:如有必要,请将文件传输到您打算用于刷新操作的计算机。如果该计算机有可用的 Internet 连接,则可以在第一步中将文件直接下载到该计算机。如果没有,那么您将必须使用可以访问互联网的计算机下载该文件,然后以某种方式将该文件传输到您将用于刷新操作的第二台计算机。请注意,用于刷新的计算机需要具有有线连接!没有无线!这就是我告诉你这个的原因。您可以与第二台计算机共享一个文件夹并以这种方式传输文件,或者您可以只使用 USB 驱动器或其他媒体。

备注 3: IP 使用 192.168.0.100(或您设置中的 IP 范围允许的任何内容),将子网掩码设置为 255.255.255.0,默认网关设置为 192.168.0.1(或任何您的路由器 IP 地址)。

备注4:通过橙色闪烁的电源指示灯即可知道您处于正确的模式。这只是为了确保所有旧的垃圾(例如设置等)都从内存中完全删除。因为,正如我已经解释过的那样,该设备会记住之前的设置,即使在执行“恢复出厂设置”之后也是如此。因此,在 Web 界面中单击“恢复出厂默认设置”不会有任何帮助,并且仅按一次设备上的“重置”按钮也没有任何帮助。它的设计是有缺陷的,这些只是噱头,它实际上没有做任何事情,就像前端(接口)和后端(机器)之间没有真正的通信一样。它所做的只是删除密码(以防您忘记密码)并从视图中删除您的设置(但实际上它们仍然在设备中编程)。所以你最好真正执行 30/30/30 程序。

备注5:文件名应为DIR825B1_FW208EUb04_beta.bin.

该设备将使用新固件进行刷新,并使用默认设置完全重新编程。请注意,如果您决定通过路由器的常规 Web 界面,您将无法实现此目的!当电源指示灯和其他指示灯一起亮起蓝色时,您就知道操作已成功执行。

备注6:执行此类操作时,不要刷新之前查看的页面,这是常识。

备注结束

我认为这个固件是在 2012 年 4 月发布的。无论如何,日期就是这么定的。我刚刚发现我无法将年份设置为 2013 年!年份菜单只有2002年到2012年。这是一个非常有趣的“问题”。感谢 D-Link!新年的好惊喜。

年菜单

这确实是一个小问题。但能够设置正确的日期和时间是件好事,特别是如果您想检查日志,或者如果您要将日志发送到系统日志服务器或类似性质的任何内容,则更是如此。

但这个固件还有另一个更令人畏惧的问题。无法更改 WIFI 密码。我更改密码并单击“保存”按钮,出现 15 秒等待对话框,假装正在保存,当我再次登录时,我从密码长度看到更改尚未应用!

下面您将看到 2.4 GHz 频段的密码字段。

更改 2.4 GHz wifi 密码

默认密码长度为 64 位。我不喜欢输入那么长的密码。所以我喜欢做的就是将默认密码从 64 位数字缩短为 16 位数字。这就是它应该看起来的样子。

使用 16 位密码更改 2.4 GHz wifi 密码

您可以看到这里密码的长度较短。但是,当我单击“保存”按钮,然后登录并再次进入同一页面时,该字段再次显示 64 位数字。这解释了为什么我无法使用新保存的密码进行连接。因为根本就没有真正保存下来。

我尝试在此处重新使用旧的 16 位密码。但即使我使用默认的64位密码也没关系,我仍然无法将其缩短为16位,或者将其更改为任意密码。我可以更改它,然后单击“保存”按钮,但它会恢复到之前的状态。所以我并没有真正改变它。

所以这里有一个解决方案。

  1. 转至“设置”、“无线设置”,然后单击“无线网络设置向导”按钮。

  2. 选择“手动分配网络密钥”,然后单击“下一步”。

  3. 分别输入 2.4 和 5 GHz 频段的密码,然后单击下一步。

  4. 记下新密码并单击“保存”。

它应该是这样的:

无线网络设置向导

这是您可以更改 WIFI 密码的唯一页面/对话框。但您不必手动设置它。您可以通过在上面的第二步中选择“自动为 2.4GHz 和 5GHz 频段分配网络密钥”来让路由器生成密码。但随后您将必须记住(如果可以的话)或记下它的所有 64 位数字,并且您必须为每个 WIFI 客户端输入该数字。

除了这个故障和设置中缺少2013年之外,这个固件似乎很稳定。我将使用它一段时间,看看它是如何工作的。我已将日期定为 2012 年 12 月 31 日。我会看看之后会发生什么。会回到2002年吗?比如一些千年虫之类的?令人惊讶的是,当他们在 2012 年使用这个固件时,他们忘记了添加 2013 年的选项,那是前一年,而不是几十年前的某个遥远的年份。