如何在使用PowerShell的Invoke-WebRequest登录路由器Web配置时读取POST请求?
如何在使用PowerShell的Invoke-WebRequest登录路由器Web配置时读取POST请求?
看起来你遇到的问题是抓包没找到登录对应的POST请求里的密码字段,这种情况在很多路由器上很常见,我来给你一步步梳理解决方法:
一、先确认你抓包的时机是否正确
很多路由器的登录请求是点击登录按钮之后才会触发的,而不是加载登录页时就发送。你需要这样操作:
- 打开浏览器开发者工具(F12),切换到「Network」标签
- 勾选「Preserve log」(防止页面跳转后请求被清空)
- 刷新路由器登录页,输入用户名和密码,点击「登录」按钮
- 此时盯着Network列表,找点击登录后新出现的POST请求,这才是真正的登录请求,你提到的
[cgi/info]大概率是获取设备状态的前置请求,不是登录用的
二、查看登录POST请求的具体参数
找到目标POST请求后,点击它查看详情:
- 如果是表单提交,看「Form Data」标签,里面会列出所有提交的键值对,比如
username=admin、passwd=xxx这类,这里的键名就是你需要的变量名(注意有些路由器会把密码字段命名成pwd、login_password甚至加密后的奇怪名称) - 如果是JSON格式的请求,看「Payload」标签,同样找用户名和密码对应的字段
三、处理路由器的隐藏验证字段
不少路由器会在登录页生成隐藏的验证字段(比如CSRF token、session ID),登录时必须和账号密码一起提交,否则会被拒绝。这时候你需要先用PowerShell获取登录页内容,提取这些字段:
# 先获取登录页,保存Session和页面内容 $loginPage = Invoke-WebRequest -Uri "http://你的路由器IP" -SessionVariable routerSession # 从页面中提取隐藏字段(比如token,这里需要根据实际页面的HTML调整选择器) $token = $loginPage.ParsedHtml.querySelector('input[name="csrf_token"]').value
四、构造完整的登录POST请求
拿到所有需要的字段后,就可以构造请求了:
# 构造提交的表单数据 $formData = @{ username = "你的用户名" passwd = "你的密码" csrf_token = $token # 如果有隐藏字段就加上 } # 发送登录请求 $loginResponse = Invoke-WebRequest -Uri "http://你的路由器IP/cgi/login" -Method Post -Body $formData -WebSession $routerSession # 验证是否登录成功:比如检查响应内容里是否包含"登录成功"或者管理页的特征内容 if ($loginResponse.Content -match "管理页面") { Write-Host "登录成功!" } else { Write-Host "登录失败,请检查参数" }
五、特殊情况:加密的密码字段
如果发现密码字段是加密后的字符串,那说明路由器在前端对密码做了加密处理。这时候你需要:
- 查看登录页的JS代码,找到加密逻辑(比如用MD5、AES或者自定义算法)
- 在PowerShell里实现同样的加密逻辑,把明文密码加密后再提交
备注:内容来源于stack exchange,提问作者SLEStyler
相关产品推荐
相关产品推荐

