首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问netgear路由器web接口

如何访问netgear路由器web接口
EN

Stack Overflow用户
提问于 2013-12-04 19:14:38
回答 2查看 5.2K关注 0票数 3

我想要做的是访问我的本地netgear路由器上的流量表数据。很容易登录到它并点击链接,但理想情况下,我想要一个小应用程序,坐在系统托盘(窗口),我可以随时检查,我想看看我的网络流量是什么。

我正在使用python试图访问路由器的网页,但我遇到了一些障碍。我最初尝试修改一个脚本来重新启动路由器(在这里可以找到rebooter.py),但是它只是提供原始的html,在onload javascript函数运行之后我就需要它了。这类事情在许多关于web抓取和建议使用selenium的文章中都有描述。

我试过selenium,遇到了两个问题。首先,它实际上打开了浏览器窗口,这不是我想要的。其次,它跳过了我为通过HTTP身份验证而放入的内容,并弹出了登录窗口。以下是代码:

代码语言:javascript
复制
from selenium import webdriver

baseAddress = '192.168.1.1'
baseURL = 'http://%(user)s:%(pwd)s@%(host)s/traffic_meter.htm'

username = 'admin'
pwd = 'thisisnotmyrealpassword'

url = baseURL % {
  'user': username,
  'pwd': pwd,
  'host': baseAddress
  }

profile = webdriver.FirefoxProfile()
profile.set_preference('network.http.phishy-userpass-length', 255)
driver = webdriver.Firefox(firefox_profile=profile)
driver.get(url)

所以,我的问题是,什么是最好的方式来完成我想要的,而不让它启动一个可见的网页浏览器窗口?

更新:好的,我尝试了sircapsalot的建议并修改了脚本如下:

代码语言:javascript
复制
from selenium import webdriver
from contextlib import closing

url = 'http://admin:notmyrealpassword@192.168.1.1/start.htm'

with closing(webdriver.Remote(desired_capabilities = webdriver.DesiredCapabilities.HTMLUNIT)) as driver:
  driver.get(url)
  print(driver.page_source)

这修复了正在加载的web浏览器,但它没有通过身份验证。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-05 00:22:18

好吧,我找到了解决办法,这比我想象的要容易得多。我确实尝试了John1024的建议,并且能够使用wget从路由器下载适当的网页。但是,我不喜欢wget将结果保存到一个文件中,然后必须打开并解析该文件。

最后,我回到了我第一次尝试修改的原始reboot_router.py脚本,但没有成功。我的问题是我想把事情弄得太复杂。这是我最后使用的脚本:

代码语言:javascript
复制
import urllib2

user = 'admin'
pwd = 'notmyrealpassword'
host = '192.168.1.1'
url = 'http://' + host + '/traffic_meter_2nd.htm'

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, host, user, pwd)
authhandler = urllib2.HTTPBasicAuthHandler(passman)

opener = urllib2.build_opener(authhandler)
response = opener.open(url)
stuff = response.read()
response.close()

print stuff

这将从我的路由器打印出整个流量计网页,并加载适当的值。然后,我可以将其提取出来并解析出其中的值。这样做的好处是,它没有需要安装的外部依赖项,如selenium、wget或其他库。干净是好事。

谢谢大家的建议。如果没有他们我是不会得到这个答案的。

票数 3
EN

Stack Overflow用户

发布于 2013-12-04 20:55:34

我的网具路由器(WNDR3700)的网络接口也充满了javascript。您的可能不同,但我已经发现,我的脚本可以获得他们需要的所有信息,没有javascript。

第一步是找到正确的URL。使用FireFox,我转到流量页面,然后使用“此帧->仅显示此帧”来发现路由器上流量页的URL为:

代码语言:javascript
复制
http://my_router_address/traffic.htm

在找到这个URL之后,就不需要网页浏览器和javascript了。例如,我可以用wget捕获这个页面。

代码语言:javascript
复制
wget http://my_router_address/traffic.htm

通过对结果的traffic.htm文件使用文本编辑器,我看到流量数据在一个很长的块中可用,该块启动:

代码语言:javascript
复制
var traffic_today_time="1486:37";
var traffic_today_up="1,959";
var traffic_today_down="1,945";
var traffic_today_total="3,904";
. . . .

因此,可以使用您选择的脚本语言轻松地捕获和解析traffic.htm文件。根本不需要执行javascript。

更新:我有一个~/.netrc文件,文件中有一行如下:

代码语言:javascript
复制
machine my_router_address login someloginname password somepassword

wget从路由器下载之前,它会从这个文件中检索登录信息。这有安全上的优势。如果运行wget http://name@password...,则可以通过进程列表(ps a)查看计算机上的所有用户的密码。使用.netrc,这种情况永远不会发生。可以在.netrc上设置限制性权限,例如,只有用户(chmod 400 ~/.netrc)才能读取权限。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20383924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档