我似乎找不到任何工作参考或示例,可以让我使用任何形式的脚本更改 Archer A23 WiFi 路由器中的设置。我花了一些时间试图让它在curl中工作但没有成功。我的目标是以编程方式从一台也连接到主 WiFi 网络(即本地)的机器上关闭和打开 IoT WiFi 网络。
尝试 1
#!/bin/bash
MODEM_IP="192.168.0.1"
USERNAME="admin"
PASSWORD="xxxxxxxxx"
echo "Logging in... "
## http://192.168.0.1/webpages/index.html?t=d6aa95cb
# Log in to the modem
LOGIN_RESPONSE=$(curl -s -X POST -d "username=${USERNAME}&password=${PASSWORD}" http://${MODEM_IP}/webpages/index.html?t=d6aa95cb)
echo "response = $LOGIN_RESPONSE"
# Extract session token if needed (depends on modem's API)
SESSION_TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.session_token')
echo "sess_token = $SESSION_TOKEN"
我得到了一些响应,但我显然是这样偏离目标:
$ ./archer.bash
Logging in...
response = <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0; URL=/webpages/index.html" />
</head>
</html>
parse error: Invalid numeric literal at line 1, column 6
sess_token =
尝试 2
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0[1] Done clear && curl –-user admin:XXXXXXXXXXX –-referer http://192.168.0.1 http://192.168.0.1/webpages/index.html?t=d6aa95cb
thebi@Monkey-ZBook MINGW64 /d/Downloads/fdfd
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0curl: (6) Could not resolve host: xn---user-xu3b
curl: (3) URL using bad/illegal format or missing URL
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0curl: (6) Could not resolve host: xn---referer-rn3d
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 272 100 272 0 0 18034 0 --:--:-- --:--:-- --:--:-- 19428<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="refresh" content="0; URL=/webpages/index.html" />
</head>
</html>
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2893 100 2893 0 0 185k 0 --:--:-- --:--:-- --:--:-- 188k<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=0"><meta name="apple-touch-fullscreen" content="yes"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="format-detection" content="telephone=no"><link rel="shortcut icon" href="themes/default/img/logo/favicon.ico?t=d6aa95cb"><link href="themes/default/css/perfect-scrollbar.css?t=d6aa95cb" rel="stylesheet"><link href="themes/default/css/spectrum.css?t=d6aa95cb" rel="stylesheet"><link href="themes/default/css/jquery.Jcrop.css?t=d6aa95cb" rel="stylesheet"><link id="baseCss" href="themes/default/css/base.css?t=d6aa95cb" rel="stylesheet"><!--[if IE 9]>
<link type="text/css" href="themes/default/css/ie9.css" rel="stylesheet" />
<![endif]--><title id="title">Opening...</title><noscript><meta http-equiv="refresh" content="0; url=error.html?t=d6aa95cb"/></noscript></head><body ontouchstart=""><div id="main-container"></div><script src="js/libs/jquery.min.js?t=d6aa95cb"></script><script src="js/libs/jquery.backgroundSize.js?t=d6aa95cb"></script><script src="js/libs/jquery.qrcode.min.js?t=d6aa95cb"></script><script src="js/libs/html2canvas.min.js?t=d6aa95cb"></script><script src="js/libs/base64.js?t=d6aa95cb"></script><script src="js/libs/encrypt.js?t=d6aa95cb"></script><script src="js/libs/cryptoJS.min.js?t=d6aa95cb"></script><script src="js/libs/tpEncrypt.js?t=d6aa95cb"></script><script src="js/libs/polyfill.js?t=d6aa95cb"></script><script src="js/libs/jquery.Jcrop.js?t=d6aa95cb"></script><script src="js/libs/spectrum.js?t=d6aa95cb"></script><script src="js/app/url.js?t=d6aa95cb"></script><script src="js/su/char.js?t=d6aa95cb"></script><script src="js/su/language.js?t=d6aa95cb"></script><script>try{if(!localStorage||!localStorage.setItem||new Function("return !-[1,];")())throw"unsupported browser"}catch(r){location.href="./error.html?t=d6aa95cb"}try{$.su.language=new $.su.Language}catch(r){location.href="./error.html?t=d6aa95cb"}GLOBAL_STYLE="default"</script><script src="js/su/frame.js?t=d6aa95cb"></script><script src="locale/ispAutoConf.js?t=d6aa95cb"></script><script>$.su.isMobile()?$('<link type="text/css" href="themes/default/css/mobile.css?t=d6aa95cb" rel="stylesheet" />').insertAfter("#baseCss"):$('<link type="text/css" href="themes/default/css/total.css?t=d6aa95cb" rel="stylesheet" />').insertAfter("#baseCss")</script><!--[if lt IE 9]><script src="js/libs/respond.min.js?t=d6aa95cb"></script><![endif]--><script>$(document).ready(function(n){App=new $.su.App,App.setContainer("main-container"),App.init().done(function(){App.launch()})})</script></body></html>
如果无法克服第一个障碍,就没有必要共享更多代码......
你所做的事情基本上是正确的,但 TP-Link 路由器的现代网络界面使用 JavaScript 重定向和 API 调用,这使得使用
curl
之类的工具很难实现你想要的。
为什么直接使用 curl 具有挑战性?
-
JavaScript 重定向:
如你观察到的那样,初始登录页面会使用 JavaScript 将你重定向到实际仪表盘。
curl
不会执行 JavaScript,因此它无法遵循此重定向。 -
基于 API 的通信:
登录后,路由器会使用 API 调用(通常是 AJAX 请求)来检索和更新设置。这些 API 通常需要 CSRF 令牌和其他身份验证措施,这使得很难使用简单的
curl
命令进行复制。
那么我该怎么办呢?
-
浏览器自动化: 最可靠的方法是使用浏览器自动化工具(如 Selenium 或 Puppeteer)。这些工具可以控制真实的浏览器,从而允许你与网络界面进行交互,就像人工操作一样。
-
反向工程 API: 如果你更喜欢非图形化方法,你可以尝试反向工程 TP-Link 路由器使用的 API。这涉及分析网络流量以识别 API 端点、请求方法、参数和身份验证机制。此选项需要更深入的技术技能和精力。
我应该注意哪些安全问题?
在你开始之前,请注意以下安全注意事项:
- 更改默认密码: 务必更改路由器的默认管理员密码,以防止未经授权的访问。
- 限制对路由器管理界面的访问: 尽可能将访问限制在你本地网络中受信任的设备上。
- 小心第三方脚本和工具: 始终查看你从互联网上下载的任何脚本或工具的源代码,以确保它们是安全的。
总结
虽然使用
curl
之类的工具直接控制 TP-Link 路由器具有挑战性,但你可以使用浏览器自动化或通过反向工程 API 来实现自动化。请务必优先考虑安全问题,并采取必要的预防措施来保护你的网络。