<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

    常用鏈接

    常用設置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 155667
    • 排名 - 391

    最新評論

    [標題]:[原]VC實現重啟路由器
    [時間]:2009-5-28
    [摘要]:使用VC發送一個HTTP請求給路由器,實現重啟TP-LINK路由器功能。
    [關鍵字]:TP-LINK,Basic Authorization,Base64,GET,HTTP
    [環境]:TP-LINK TL-R402M SOHO 寬帶路由器 , VC6 , HttpFox,Firebug
    [作者]:Winty (wintys@gmail.com) http://m.tkk7.com/wintys

    [正文]:
        在瀏覽器里輸入地址:192.168.1.1,它會彈出一個窗口, 要求輸入密碼。這是因為服務器要求HTTP Basic access authentication(http://en.wikipedia.org/wiki/Basic_access_authentication)。輸入用戶名和密碼就可以進入路由器管理界面了,點擊"重啟路由器"按鍵即可重啟路由器。如何編程實現向路由器發送重啟的請求?

        (1)、打開Windows命令行,將以下命令粘貼到命令行里(注意,最后有一個空行)。
    telnet 192.168.1.1 80
    GET / HTTP/1.1
    Host:192.168.1.1

        服務器會返回如下信息:
    HTTP/1.1 401 N/A
    Server: TP-LINK Router
    Connection: close
    WWW-Authenticate: Basic realm="TP-LINK SOHO Router R402M"
    Content-Type: text/html

    Web Server Error Report:<HR>
                                <H1>Server Error: 401 N/A</H1>
    <P><HR><H2>Access denied</H2><P><P><HR><H1>/userRpm/index.htm</H1><P><HR>please
    mail problems to support@tp-link.com.cn
        路由器會返回狀態碼:401。這說明,本次訪問是未經授權的,服務器拒絕了。同時,還可以看到:WWW-Authenticate: Basic realm="TP-LINK SOHO Router R402M",這說明路由器確實需要Basic驗證。


        (2)、再使用Firebug和Httpfox分析出點擊"重啟路由器"時,瀏覽器向路由器發送的請求。發現,主要請求內容如下:
    GET /userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7 HTTP/1.1
    Host:192.168.1.1
    Authorization:Basic YWRtaW46YWRtaW4=
        其中,Authorization請求頭的內容中,"Basic"表示"Basic authorization驗證" ;"YWRtaW46YWRtaW4="是使用Base64編碼后的用戶名和密碼,解密后是"admin:admin"。使用Base64編碼有兩個目的:a、使用戶名和密碼不能直接被肉眼識別;b、使傳送的內容中無非法字符,即使用戶名或密碼中有不適于直接使用HTTP協議傳送的字符,使用Base64編碼后,就符合了協議要求。Base64能被輕易解密,所以不能依賴它來實現安全的訪問控制。

        同樣,也可以自己在命令行輸入以下內容,實現以上的HTTP請求,從而實現重啟路由器功能(最后有一個空行):
    telnet 192.168.1.1 80
    GET /userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7 HTTP/1.1
    Host:192.168.1.1
    Authorization:Basic YWRtaW46YWRtaW4=

        (3)、用VC6發送GET請求:
    void CUtil::RestartRouter(CString& strHost)
    {
        CInternetSession session("Winty's Session");
        CHttpFile* pHttpFile;
        //路由器要求Basic Authorization:用戶名:admin,密碼:admin
        CString strHeaders = _T("Authorization:Basic YWRtaW46YWRtaW4="); // 請求頭
        
        try
        {
            INTERNET_PORT nPort; //端口
            CString strRelativeRequestURL;
            nPort = 80;
            strRelativeRequestURL = "/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7";
            
            CHttpConnection* pServer = session.GetHttpConnection(strHost, nPort);
            
            pHttpFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,strRelativeRequestURL);
            pHttpFile->AddRequestHeaders(strHeaders);
            pHttpFile->SendRequest();
            
            //判斷請求是否成功
            DWORD dwStatusCode;
            BOOL bSuccess;
            bSuccess = pHttpFile->QueryInfoStatusCode( dwStatusCode );
            CString strMsg;
            strMsg.Format("登陸失敗! 錯誤信息:HttpStatusCode=%d" , dwStatusCode);
            if(!bSuccess || !(dwStatusCode>=200 && dwStatusCode<300)){
                AfxMessageBox(strMsg);
            }
        }
        catch(CException* e)
        {
            pHttpFile = NULL;
            throw;
        }
        pHttpFile->Close();
        delete pHttpFile;

        session.Close();
    }
        調用函數:RestartRouter("192.168.1.1");,即可實現重啟路由器功能。

    [參考資料]:
    Basic access authentication :http://en.wikipedia.org/wiki/Basic_access_authentication
    原創作品,轉載請注明出處。
    作者:Winty (wintys@gmail.com)
    博客:http://m.tkk7.com/wintys

    posted on 2009-05-29 23:36 天堂露珠 閱讀(5017) 評論(8)  編輯  收藏 所屬分類: C++

    FeedBack:
    # re: [原]VC實現重啟路由器 2009-05-29 23:53 事發當時
    這種情況下,不止vc,所有httpcliet都可以實現吧!!!  回復  更多評論
      
    # re: [原]VC實現重啟路由器 2009-05-30 09:41 天堂露珠
    @事發當時
    在命令行直接輸入HTTP GET請求都可以,其它的編程語言或工具當然也可以。  回復  更多評論
      
    # re: [原]VC實現重啟路由器[未登錄] 2009-05-31 22:41 java
    一年能在做搜索引擎時,去訪問百度,google,太平凡了,老被封IP,總要重啟路由器,來重新獲取新IP,后來自己就用C#寫了一個,原理和實現方法跟你一樣,,當然感覺很牛B,現在想想真SB.
      回復  更多評論
      
    # re: [原]VC實現重啟路由器 2009-06-01 12:00 天堂露珠
    @java
    上網掉線后,需要重啟路由器,所以寫了一個重啟路由器的實用工具而已。  回復  更多評論
      
    # re: [原]VC實現重啟路由器 2009-11-06 02:18 真陳
    達人,你好
    關于你的這段代碼,我也看過,試著自己整,有點問題
    我的路由器(R402M VER070605)不支持TELNET
    我試過,http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7
    如果把用戶名密碼寫好進入主界面后,用以上鏈接可以成功
    現在的關鍵是
    我想直接通過做一個HTML網頁,讓它一運行就能全自動重啟路由器,而不用每次都去輸入用戶名密碼,就是你的那個basic驗證,怎么做?希望指教,謝謝  回復  更多評論
      
    # re: [原]VC實現重啟路由器 2009-11-06 02:23 真陳
    天堂露珠大大
    最好是希望你能寫一個界面,有兩個INPUT,一個用戶名,一個是密碼
    然后有一個JAVA的bASIC加密(當別人的密碼不是默認的時候,可以方便改)
    然后,用這個繞過輸入用戶名密碼這一步,再http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7 是不是就可以達到重啟的目的了?我的想法對嗎?

    那么,那個怎么寫呢?我是菜鳥,希望得到你的指望  回復  更多評論
      
    # re: [原]VC實現重啟路由器 2009-11-06 10:14 天堂露珠
    我的代碼移植性并不高,就是沒有把密碼等作為參數傳入。但是這樣對我來說已經夠了,實現功能就行了,自己用用很方便,也不用Base64加密了(因為使用的用戶名密碼都已加密YWRtaW46YWRtaW4=)。
    我的TELNET例子只是為了方便手動調試。支不支持并不重要。
    你的想法是對的。無論是用Java、VC還是瀏覽器,只要能向路由器發送HTTP GET請求就可以了。具體的向服務器發送HTTP請求并設置請求頭的Java例子可以在網上找找,然后再改一下就可以了。  回復  更多評論
      
    # re: [原]VC實現重啟路由器 2009-11-06 10:17 天堂露珠
    Form形式的HTTP Basic Authentication
    參考:http://hi.baidu.com/thinkinginlamp/blog/item/16f6d933f131b644ad4b5f98.html
    如(將文件保存為reboot.hta):
    <html>
    <head>
    <title>login</title>
    <script>
    var xmlHttp;

    function createXMLHttpRequest() {
    if (window.ActiveXObject) {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
    xmlHttp = new XMLHttpRequest();
    }
    }

    function login() {
    createXMLHttpRequest();

    var username = document.getElementById("username").value;
    var password = document.getElementById("password").value;

    xmlHttp.open("GET", "http://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7", false, username, password);
    //xmlHttp.setRequestHeader("Content-Type","...");
    xmlHttp.send(null);

    if(xmlHttp.status!=200)
    alert(xmlHttp.status);
    else
    alert("OK");

    return xmlHttp.status == 200;
    }
    </script>
    </head>
    <body>
    <form action="#" method="post" onsubmit="return login();">
    <fieldset>
    <legend>Login</legend>
    <label for="username">username:</label>
    <input type="text" id="username" name="username" value="admin">

    <label for="password">password:</label>
    <input type="password" id="password" name="password" value="admin">

    <input type="submit" value="submit">
    </fieldset>
    </form>
    </body>
    </html>
    由于Firefox不支持跨域訪問,所以,上述代碼只能在IE中運行。由于是保存為.hta,那么雙擊就可以運行了。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲另类激情专区小说图片| 大陆一级毛片免费视频观看i| 亚洲熟女一区二区三区| 免费福利在线观看| 免费人成激情视频| 一级一片免费视频播放| 国产亚洲精品资在线| 三级毛片在线免费观看| 久久精品国产精品亚洲艾| 91免费国产精品| 亚洲成人免费在线观看| 成人人观看的免费毛片| 国产偷国产偷亚洲清高APP| 亚洲中文字幕伊人久久无码| a级毛片免费高清毛片视频| 亚洲综合在线视频| 久久国内免费视频| 国产偷国产偷亚洲高清人| 亚洲午夜日韩高清一区| 97久久免费视频| 亚洲一本一道一区二区三区| mm1313亚洲精品无码又大又粗| GOGOGO免费观看国语| 91亚洲国产成人精品下载| 在线免费观看色片| 中国毛片免费观看| 国产精品亚洲片在线va| 亚洲国产精品一区二区九九| 国产va在线观看免费| 亚洲国产精品无码观看久久| 国产亚洲精品不卡在线| 在线看免费观看AV深夜影院| 国产精品亚洲а∨天堂2021 | 亚洲AV成人潮喷综合网| 国产亚洲精品免费视频播放| 亚洲国产成人va在线观看网址| 成人永久免费高清| 99re热精品视频国产免费| 欧美激情综合亚洲一二区| 久久国产亚洲观看| 国产在线19禁免费观看|