VC实现重启路由器

[摘要]:使用VC发送一个HTTP请求给路由器,实现重启TP-LINK路由器功能。

[关键字]:TP-LINK,Basic Authorization,Base64,GET,HTTP

[环境]:TP-LINK TL-R402M SOHO 宽带路由器 , VC6 , HttpFoxFirebug

[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/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)、再使用FirebugHttpfox分析出点击"重启路由器"时,浏览器向路由器发送的请求。发现,主要请求内容如下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值