Я пытаюсь зарезервировать IP-адрес для моего настольного ПК в DIR-825, и когда я ввожу все данные и нажимаю кнопку Сохранить, он говорит мне, что MAC-адрес недействителен.
Мой MAC-адрес выглядит примерно так 1C:BD:B9:xx:xx:xx
.
Я могу добавлять и сохранять другие MAC-адреса с других моих сетевых устройств, но не с этого. Поэтому я попытался изменить формат, включив в него тире вместо точек с запятой, но он по-прежнему считался недействительным. Затем я заметил, что у большинства других моих вещей есть MAC-адрес, который начинается с 00, поэтому я попытался изменить 01 на 00, и это было принято.
Да, MAC-адрес был принят, и это было очень мило, но, конечно, это неправильный MAC-адрес. Почему он примет адрес, если он начинается с 00, а не если он начинается с 01?
(Интересно: первые 3 байта, включая оскорбительную часть, принадлежат D-link)
Я дважды прошил FW, с 2.01EU до 2.01EU, а затем обновил до 2.06EU, но это не решило проблему, и маршрутизатор все еще запоминает старые настройки, даже если они не представлены в интерфейсе.
После перепрошивки маршрутизатора с произвольным FW веб-интерфейс выглядит пустым, но маршрутизатор работает так, как если бы он все еще имел ту же конфигурацию, хотя в инструкциях говорилось, что процедура перепрошивки сотрет мои настройки и данные.
Даже когда я восстановил заводские настройки, он все равно запомнил настройки.
В итоге я выполнил «процедуру 30/30/30», в которой вы удерживали кнопку RESET в течение 30 секунд, одновременно выключая и снова включая питание. Это вызывает "Система обновления прошивки". Я выбираю свой файл FW и отправляю его на роутер для перепрошивки.
Перепрограммирование завершилось, и настройки, наконец, исчезли, и я смог начать создавать новые настройки по одному шагу за раз. Затем я пришел в список резервирования IP и снова застрял.
Почему это происходит, почему он не принимает MAC-адрес? Есть ли объяснение этому?
Как заставить его принять проклятый адрес?
Обновить:
Предполагается, что для этой проблемы нужен хак, когда вы перезаписываете функцию check_mac
одним из следующих кодов на стороне клиента.
Code 1:
javascript:alert(check_mac=function (){return true;});
Code 2:
javascript:(function(){ window['check_mac'] = function() { return true; } })();
Я попробовал оба из них, но это не сработало. Как вы выполняете этот код в любом случае? Достаточно ли просто набрать его и нажать Enter из браузера?
Источник:
Я спросил об этом D-Link, и мне прислали бета-версию FW 2.08EU, бета 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();
}