0

我正在尝试使用 JavaScript (jQuery) 登录我的 Netgear 路由器:

username = "admin";
password = "myrouterpassword";
url = "http://192.168.1.1";
async = false;
type = "GET";
timeout = 3000;
$.ajax({url:url, type:type, async:async,
        username:username, password:password, 
        success: function(reponse) {.. stuff ..}, 
        error: function(error) {.. stuff ..}
      });

这会在 Firefox 中返回“拒绝访问受限 URI”错误,在 Chrome 中返回“NetworkError:发生网络错误”。我不相信这是一个跨域问题,因为我正在使用与 192.168.1.2 上的另一个资源极其相似的 jQuery 构造进行调用,并且它的工作方式就像一个魅力(除了不受密码保护,所以我不是使用用户名和密码字段)。

我的 jQuery 版本是 1.9.1。我在这里尝试了几种变体。例如,将此添加到 ajax 选项中:

xhrFields:{ withCredentials: true }

而且我还尝试不使用用户名和密码字段,而是使用标头而不是使用 Base 64 计算身份验证并使用它:

headers:{'Authorization':auth}

我还尝试了较旧的推荐方法:

beforeSend:function(req) { req.setRequestHeader('Authorization', auth); }

当我在后端使用 Python 访问这个路由器时,它完全可以工作:

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, baseurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
devhandle= urllib2.urlopen(baseurl+'/DEV_device.htm')
devcontent=devhandle.read()

这给了我连接到这个路由器的设备列表。我真的需要在 Javascript 中执行此操作,并且知道我能够连接到完全相同域 (192.168.1.x) 中的其他设备,这表明它应该是可行的。对所有建议开放,非常感谢任何帮助!

附加信息:我添加了dataType:"html"并且错误更改为 *NS_ERROR_DOM_BAD_URI*。添加dataType:"json"会导致同样的事情。当我将其更改为dataType:"jsonp"并同时出现xhrFields:{ withCredentials: true }时,我看到路由器的登录框突然弹出!所以,它显然是到达路由器的。我显然不希望这样 - 登录应该默默地发生,但它仍然是一些东西。我现在登录时在错误消息中得到了这个:{“readyState”:4,“status”:200,“statusText”:“success”}. 登录弹出窗口是暂时的(自然是因为一旦我登录,它就不会再次提示我)。还在折腾。如果我让它工作,我会更新。如果有一些想法,请告诉我。

CHROME CONSOLE INFO:这是我在控制台中看到的:

Resource interpreted as Script but transferred with MIME type text/html: "http://192.168.1.1/?callback=jQuery19109538986752741039_1379841839394&_=1379841839396". jquery-1.9.1.js:8336
send jquery-1.9.1.js:8336
jQuery.extend.ajax jquery-1.9.1.js:7978
ajaxnow mainscreen.htm:79
onclick mainscreen.htm:1
Uncaught SyntaxError: Unexpected token < 

ajaxnow() 是我的脚本中进行 .ajax 调用的函数。

4

3 回答 3

1

如果您遇到跨域问题,并且想要禁用检查,您可以在没有网络安全的情况下运行 chrome:

chromium-browser --disable-web-security

不用说,如果您的浏览器有任何敏感网站的 cookie/保存密码,这将是极其危险的。

于 2013-09-22T03:49:34.967 回答
0

首先,将“http://”添加到您的网址。

然后,python 不会强制执行同源策略,但浏览器会执行。浏览器将根据来自目标主机的 OPTIONS 响应的 Access-Control-Allow-* 标头允许/拒绝跨域请求。MDN 参考。因此,除非您可以修改路由器的页面/响应或运行安全破解版本的浏览器,否则它不会在不同主机上的浏览器中发生。

最后,也许 node.js 是你应该使用的。

于 2013-09-22T06:13:21.377 回答
-1

当您尝试重置网络设备路由器时,我可能无意中发现了此 192.168.1.1:80 错误消息的修复程序。工人对我的简短回答(在尝试了所有发布的建议之后)是重新连接并重新启动一切。

最终,在无法保护网络 2 天但通过互联网连接后,每当我的 mac 笔记本电脑连接到它并且互联网完全中断时,我的前景就会冻结。我在度假时住在租来的公寓里,所以没有 Netgear WNR1000v3 路由器的安装 CD。完全失去连接后,我重新启动路由器并重新连接所有连接(不好),最后重新启动电缆调制解调器((科学亚特兰大)并恢复互联网,同时输入 192.168 时出现相同的 192.168.1.1:80 消息.1.1 进入浏览器,最后让我输入默认用户名和密码(用户,密码),登录路由器(通过 192.168.1.1)并允许访问所有设置,包括更改密码设置。

于 2014-01-10T13:48:40.753 回答