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

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

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

我的 MAC 地址类似于1C:BD:B9:xx:xx:xx

无效的 MAC 地址

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

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

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

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

在使用任意 FW 刷新路由器后,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; } })();

我尝试了这两种方法,但都没有用。你到底如何执行这段代码?只需在浏览器中输入并按 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();
}

答案1

我有另一个解决方案:如果您不想在 DIR-825 上安装测试版固件,我有一个解决方案。我已在运行固件版本 2.01EU 的 DIR-825 rev. B EU 型号上执行此操作,2009 年 5 月 22 日,星期五。

  1. 打开 Google Chrome
  2. 以管理员身份登录DIR-825。
  3. 转到网络设置。
  4. 点击“保留”,并根据需要更改计算机名称。
  5. 按 F12 后 Chrome 中会打开一个提示。
  6. 在控制台选项卡(正确的是默认打开的选项卡)中粘贴以下内容并按下键盘上的 ENTER 键:

    check_mac = 函数 check_mac(mac){ var error = true; 返回错误; };

  7. 现在再次按 F12。

  8. 在网络设置网站上点击“保存”按钮,然后您就保留了您的设备。

一些背景信息:由于验证是在浏览器中本地运行的 JavaScript 中完成的,因此我们可以更改代码。在本例中,我们修改了一个 JavaScript 函数。

答案2

问题解决了!我给它刷了 2.08EU beta 4。这解决了我遇到的某些 MAC 地址“无效”的问题。但它并没有解决最初的问题,而且还带来了其他问题。目前,我对这一事实并不感到惊讶,因为我已经使用这款设备 2 年多了,还有其他 D-Link 设备。

总是这样,我着手解决一个小问题,结果却花了晚上和周末的时间刷新和破解设备,让设备正常工作。很长时间以来,一切都运行顺利,但最近这台路由器特别出问题。好像它有自己的想法。这是一个永无止境的迷宫。

这是解决 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。此文件尚未公开。因此请致电或发送电子邮件索取。请注意,此文件仅适用于硬件修订版 B1 的欧洲版 DIR-825。

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

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

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

註釋5:文件名应为DIR825B1_FW208EUb04_beta.bin

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

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

备注结束

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

年菜单

这确实是个小问题。但是能够设置正确的日期和时间还是不错的,特别是当你想检查日志时,或者当你将日志发送到系统日志服务器或类似的东西时。

但是这个 FW 还有另一个更令人生畏的问题。无法更改 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 年之外,这个 FW 似乎很稳定。我会用一段时间,看看它是如何工作的。我已将日期设置为 2012 年 12 月 31 日。我会看看之后会发生什么。它会回到 2002 年吗?就像 Y2K 漏洞之类的?令人惊讶的是,他们在 2012 年使用这个 FW 时忘记了添加 2013 年的选项,这是前一年,而不是几十年前的某个遥远的年份。

答案3

为什么如果地址以 00 开头它会接受,但是如果地址以 01 开头它就不会接受?

因为地址在该位置有奇数预订的用于多播。如错误消息所示,01 是无效的。你的计算机本来就不应该有这样的 MAC 地址。

维基百科

如果地址的最高八位字节的最低有效位设置为 0(零),则该帧只能到达一个接收 NIC。[5] 这种传输类型称为单播。单播帧被传输到冲突域内的所有节点,通常以最近的网络交换机或路由器结束。只有具有匹配硬件 MAC 地址的节点才会接受该帧;除非设备处于混杂模式,否则 MAC 地址不匹配的网络帧将被忽略。

如果最高有效地址八位字节的最低有效位设置为 1,则该帧仍将仅发送一次;但是,NIC 将根据与匹配的 MAC 地址不同的标准选择接受该帧:例如,根据可配置的可接受多播 MAC 地址列表。这称为多播寻址。

我知道其中关于最低有效位和最高有效位有一些令人困惑的东西,但如果你采用以下地址:

01:23:45:67:89:AB

它指的是第一个位置的项目:01。该项目必须甚至,或者该地址保留用于多播,并且无效

通常,设备的 MAC 地址内置于硬件中。但是,某些设备、特殊软件或驱动程序实用程序可能允许您更改此地址。如果您自己在计算机上设置此 MAC 地址,则应将计算机的 MAC 地址更改为有效的地址。如果您的计算机/网卡是这样的,请联系卖家,因为这是一个缺点如果您有任何保修,他们应该会修理或更换网卡。即使您找到了简单的解决方法,我也会这样做,因为此处的缺陷很可能预示着其他问题。

答案4

我的 DIR-816 型号也遇到了类似的问题,因此我删除了中间的冒号并添加了 MAC 地址,这样就解决了。

例如,44:94:fc:96:36:7f我没有输入 ,而是输入了4494fc96367f

相关内容