这篇文章及源码是在
http://blog.csdn.net/marklr/article/details/4389496 的基础上写的,但是内容又有些不样。该实例在VC++6.0的控制台下编译通过,可以实现重启路由器的功能,而且速度还是比较快的。不过要声明的是:该实例占用空间有些大(我加了一个图标和一个版本信息就成了1.73MB),但也有可能因电脑而异。还有最关键的一点,360有时候报毒,但我敢肯定,本程序没有恶意举动(再说我又公布了源码,自己看看呗)。最后,说明:我自己写文章的经验不多,还望多多指教。文章版权没有,随便转载,可以标明原链接,自愿!
(注:我们今天讲的是控制台程序,源码里用WinMain函数是为了不显示窗口
如果要用main函数的话请在头文件后面加一句
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
)
主要代码(完整的)
#include <afxinet.h> //这个头文件有许多MFC的定义,包括CString
#include <Winsock2.h> //网络编程的头文件
#include <stdlib.h> //杂类,里面有很多不好分类的函数
#pragma comment(lib,"ws2_32.lib") //网络编程的库
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
int main(int argc,char *argv[])
{
CString strHost = _T("192.168.1.1"); //IP
CInternetSession session("Winty's Session"); //这个我也不知道
CHttpFile* pHttpFile;
CString strHeaders = _T("Authorization:Basic YWRtaW46YWRtaW4=");
//这是用户名和密码的base64格式,解密后是admin:admin
int err=0;
//成功
try //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))
{
MessageBox(NULL,strMsg,"登录路由器失败",MB_OK);
}
}
catch(CException *e)
{
pHttpFile = NULL;
throw;
}
pHttpFile->Close();
delete pHttpFile;
session.Close();
return 0;
}
打开VC++6.0,Ctrl+N,新建一个CPP文件,把代码复制进去,编译运行,路由器即可重启。
(只能重启IP为192.168.1.1、端口为80、用户名和密码均为admin的路由器,如果你的路由器配置不样,请修改。本系统只支持TP-LINK路由器)