在IE里面输入路由器IP地址就会弹出个登陆框,输入账号密码后,就可以看到路由器的界面了
现在我想通过编程实现登陆路由器,下载网页的源代码到本地,怎么实现
希望大家给出C#代码
给出原理也行
关键是那登陆界面不是普通的网页,不知道可不可以POST,还有验证页面也不知道

解决方案 »

  1.   

    你可以考虑从以下途径实现看看:途径一:通过WebClient访问路由器的指定管理页面进行自动登陆处理;途径二:通过引用webbrowser浏览器控件结合mshtml组件模拟用户登陆处理
      

  2.   

    可以使用telnet.然后把读出的buffer转换为文本形式.然后...
      

  3.   

    我用的HttpWebRequest
    可以选择附带身份验证信息
      

  4.   

    //以D-Link DI-624+A为例:private void postrequest()
            {
                string userName = "admin";
                string password = "702";
                CookieContainer webCookieContainer = new CookieContainer();
                String url = "http://192.168.1.1"; 
                 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);   
                req.Method = "GET";
                req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;CIBA)";
                req.CookieContainer = webCookieContainer;
                req.KeepAlive = true;
                req.Accept = "*/*";
                req.PreAuthenticate = true;
                CredentialCache myCache=new CredentialCache();
                myCache.Add(new Uri("http://192.168.1.1"), "Basic", new NetworkCredential(userName, password));//添加Basic认证
                req.Credentials = myCache;
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                resp.Cookies = webCookieContainer.GetCookies(req.RequestUri);
                StreamReader sr = new StreamReader(resp.GetResponseStream(), System.Text.Encoding.Default);
                String line = sr.ReadToEnd();//这里就是网页内容了。
                sr.Close();
                resp.Close();  
            }
      

  5.   

    4楼的很正确,我还想问下
    我现在暂时不需要读取网页内容
     public static void ConnectCallback1(IAsyncResult ar)
            {
                allDone.Set();
                Socket s = (Socket)ar.AsyncState;
                try
                {
                    s.EndConnect(ar);
                }
                catch
                {
                }
            }           public void Scan()
            {
                
                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                allDone.Reset();
                try
                {
                    s.BeginConnect(m_host, 80, new AsyncCallback(ConnectCallback1), s);
                }
                catch
                {
                }            // wait here until the connect finishes.  The callback 
                // sets allDone.
                allDone.WaitOne(timeout, false);            if (s.Connected)
                {
                    string url = "http://" + m_host;
                    //如果连接上,证明此商品为开放状态
                    try
                    {
                        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
                        request.Timeout = 5000;
                        WebResponse response = request.GetResponse();
                    }
                    catch (Exception es)
                    {
                        //返回错误为401,权限不足,为路由器登陆界面
                        if (es.Message.Contains("401"))
                        {
    }
      

  6.   

    我用上面的代码测试目标HOST是不是路由器登陆界面
    第一次测试很正确,关掉程序再打开测试结果就不同了,关掉电脑再开结果又很正确,我怀疑有个缓存机制,具体的我就不知道了,有没有人帮我解决下,我希望不管在什么情况下,只要对方是路由器登陆界面,都返回401错误
      

  7.   

    一般来说,路由器的配置管理有多种方案。不明白lz为什么死了心要用一个本来设计给浏览器的方案来做。我的建议是,能够用SNMP配置管理就好了,很方便。当然,能用TR069这样的新协议就更有趣了。