nodejs 获取路由的主机列表
文章目录
1. 介绍
接着之前,今天的目标是通过 nodejs 获取使用路由的主机名称列表。
路由器的默认登录地址为:http://192.168.1.1
默认的用户名密码都为:admin
通过 chrome 浏览器的 Network 工具,我们可以知道路由器的登录方式是 HTTP Basic Authentication。
HTTP Basic Authentication 是一种通过直接提供用户名、密码来进行验证身份的一种优化的解决方案。
因此,在访问一个需要 HTTP Basic Authentication 的 URL 的时候,如果你没有提供用户名和密码,服务器就会返回401, 如果直接在浏览器中打开,浏览器会提示你输入用户名和密码。
要在发送请求的时候添加 HTTP Basic Authentication 认证信息到请求中,有两种方法:
1) 在请求头中添加Authorization:
1
|
Authorization: "Basic 用户名和密码的base64加密字符串" |
2) 在url中添加用户名和密码:
1
|
http://userName:password@192.168.1.1 |
通过分析路由器的页面地址,可以知道获取主机列表的页面地址为:
1
|
http://192.168.1.1/userRpm/AssignedIpAddrListRpm.htm?Refresh=true |
2. 代码实现
在这里,我们使用第二种方法来添加认证,使用 http 模块获取主机列表页面的内容,在通过正则表达式进行匹配出主机列表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
var http = require('http'); http.get('http://admin:admin@192.168.1.1/userRpm/AssignedIpAddrListRpm.htm?Refresh=true', function(res) { var content = ''; res.setEncoding('utf8'); res.on('data', function(data) { content += data; }); res.on('end', function() { handle(content); }) }); function handle(content) { content = content.replace(/\n/g, ''); var m = content.match(/var DHCPDynList = new Array\(([^\)]*)\);/); var str = m[1].substring(1); var arr = str.split('", "'); var agents = []; var i = 0; while (i < arr.length) { agents.push(arr[i]); i += 4; } console.log(agents); } |
文章作者 wenzhixin
上次更新 2013-10-28