【发布时间】:2023-10-16 09:29:01
【问题描述】:
我正在尝试获取路由器上已连接设备的列表。我可以手动完成,但我想要一个 c# 应用程序为我完成,以便我可以自动监控我的网络。
我已经尝试过使用以下代码向包含设备的路由器页面的 URL 发出 WebRequest:
string url = @"http://192.168.1.1/ui/dboard/homenet";
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
request.ContentType= "application/x-www-form-urlencoded";
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("admin:admin"));
Stream stream = request.GetResponse().GetResponseStream();
StreamReader reader1 = new StreamReader(stream);
string response = reader1.ReadToEnd();
foreach (string el in response.Split('\n'))
{
Console.WriteLine(el);
}
但我得到的响应是重定向到路由器的登录页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<link rel="SHORTCUT ICON" href="/images/shortcut.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Residential Gateway - D-Link</title>
<link rel="stylesheet" href="/css/common.css" />
<link rel="stylesheet" href="/css/theme.css" />
<script type="text/javascript" src="/js/jquery.tools.min.js"></script>
<script type="text/javascript" src="/js/common.js"></script>
<script type="text/javascript" src="/js/headerMobile.js"></script>
<script type="text/javascript">detectMobile();</script>
<link rel='stylesheet' type='text/css' href='/css/login.css'/>
<link rel='stylesheet' href='/css/custom.css'/>
<script type='text/javascript'>detectMobile('login_m.css');</script>
<script type='text/javascript'>detectMobile('custom_m.css');</script>
<script type='text/javascript' src='/js/hmac-sha256.js'></script>
<script type='text/javascript' src='/js/md5.js'></script>
<script type='text/javascript' src='/js/md5_crypt.js'></script>
</head>
<body onresize="resize()" onscroll="resize()" onmouseup="resize()">
<div id="header">
<div id='btnClose'><button type='button' class='close' onclick='link_onclick(this); history.back()'/></div>
<img id="logo" src="/images/logo.png" />
</div>
<!--START content-->
<div id="content">
<form name="form" action="/ui/login" method="post" onsubmit="login_onsubmit();" autocomplete="off">
<div id="loginPanelBox">
<div id="navigationBarMobile">
<ul>
<li>Login</li>
</ul>
</div>
<div id="panelLogin" class="panel">
<label class="panel">
Login
</label>
<img class="panel" src="/images/Login16.png" />
<hr class="panel" />
<fieldset class="form">
<div class="formField" id="userName" help_tooltip="off">
<label for="userName">Nome Utente:</label>
<input type="text" name="userName" value="" />
</div>
<div class="formField" id="origUserPwd">
<label for="origUserPwd">Password:</label>
<div class="passwordField">
<input type="password" autocomplete="off" name="origUserPwd" value="" />
</div>
</div>
我通过 POST 请求得到相同的结果,将用户名和密码设置为这样的凭据:
request.Credentials = new NetworkCredential("admin", "admin");
但仍然没有有用的结果。 我确定用户名和密码正确。
我怎样才能成功登录并获得我想要的页面? 路由器标签是 D-Link。
【问题讨论】:
-
使用您的浏览器调试器,检查网络选项卡查看发布请求,模仿它。例如,我的 Linksys 使用 json 请求和基本身份验证,当我登录时,我可以看到 post 请求以及标题和响应,我可以在我的请求中使用它来使用相同的请求信息从 HttpWebRequest 登录/跨度>
标签: c# html network-programming webrequest