本代码用于远程重启水星无线路由一体机MD898N,硬件版本v2,固件版本0.8.0 1.0 v1003.0 Build 140216。
由于需要,需要用C#实现对这台机器的定时重启,根据chrome开发者工具的抓包结果,发现新版的固件不支持直接的base认证,但是原理一样,只是把用base64加密过的密码存在cookies中了(今年开始更新后的固件都是这种登录方式),发送http请求时候带上这个cookies即可通过认证!
具体代码如下:
string passwd = "12345678"; // 路由器登录密码
string routeIP = "192.168.1.1"; // 路由器IP
byte[] bytes = Encoding.Default.GetBytes(passwd);
string base64str = Convert.ToBase64String(bytes);
string url = "http://" + ip + "/cgi?7";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Referer = "http://" + ip + "/";
req.Method = "POST";
req.CookieContainer = new CookieContainer();
req.CookieContainer.Add(new Uri(url), new Cookie("Authorization", "Basic " + base64str));
req.ContentType = "text/plain";
string payload = "[ACT_REBOOT#0,0,0,0,0,0#0,0,0,0,0,0]0,0\r\n"; // 抓包后发现在请求中携带这个字符串即可让路由器重启
byte[] pl = Encoding.UTF8.GetBytes(payload);
req.ContentLength = pl.Length;
Stream s = req.GetRequestStream();
s.Write(pl, 0, pl.Length);
s.Close();
req.GetResponse(); |
string passwd = "12345678"; // 路由器登录密码
string routeIP = "192.168.1.1"; // 路由器IP
byte[] bytes = Encoding.Default.GetBytes(passwd);
string base64str = Convert.ToBase64String(bytes);
string url = "http://" + ip + "/cgi?7";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Referer = "http://" + ip + "/";
req.Method = "POST";
req.CookieContainer = new CookieContainer();
req.CookieContainer.Add(new Uri(url), new Cookie("Authorization", "Basic " + base64str));
req.ContentType = "text/plain";
string payload = "[ACT_REBOOT#0,0,0,0,0,0#0,0,0,0,0,0]0,0\r\n"; // 抓包后发现在请求中携带这个字符串即可让路由器重启
byte[] pl = Encoding.UTF8.GetBytes(payload);
req.ContentLength = pl.Length;
Stream s = req.GetRequestStream();
s.Write(pl, 0, pl.Length);
s.Close();
req.GetResponse();