📄 main.cpp
字号:
#include"SocketObject.h"
#include"Thread.h"
#include<iostream>
#include<cstdio>
#include<fstream>
#include<vector>
#include<list>
#include<map>
#include<boost\regex.hpp>
using namespace std;
using namespace boost;
#pragma comment(lib,"ws2_32.lib")
#define BUFSIZE 10
typedef pair<string,void*> Pair;
typedef unsigned (*COMMAND)(string& command);
char fuckDRCOM[16]={'D','r','c','o',0xD2,0x20,0x70,0x01,0xE6,0x00,0xAC,0x1A,0x53,0x01,0xC2,0x0D};
//ofstream out("send.txt",ios_base::trunc);
//ofstream out2("recv.txt",ios_base::trunc);
string proxyaddr="172.26.83.216";
int proxyPort=7000;
unsigned __stdcall serverFunc(void* param);
unsigned __stdcall controlFunc(void* param);
unsigned __stdcall threadSourceCleanFunc(void* param);
unsigned __stdcall controlFunc(void* param);
unsigned help(string& param);
unsigned operateCom(string& com);
string getFuncName(string& com);
void initCom();
vector<string> getFuncParam(string& com);
map<string,void*> coms;
int main(int argc,char** argv)
{
//regex expression("host: (.*?)\r\n",regbase::icase);
//if(argc!=3)
//{
// cout<<"参数错误"<<endl;
// return 0;
//}
//proxyaddr=argv[1];
//proxyPort=atoi(argv[2]);
cout<<"Fuck Dr.Com for freedom!"<<endl;
initCom();
SocketObject serverSock;
serverSock.Create(AF::af_inet,SOCKTYPE::sock_stream,PROTOCAL::ipproto_ip);
flag:
cout<<"输入本机绑定端口:"<<endl;
int localPort=7000;
cin>>localPort;
if(!serverSock.Bind(localPort))
{
cout<<"端口绑定失败!"<<endl;
goto flag;
}
cout<<"输入服务器IP:"<<endl;
cin>>proxyaddr;
cout<<"输入服务器端口:"<<endl;
cin>>proxyPort;
fflush(stdin);
Thread controlThread(controlFunc,NULL);
controlThread.ThreadStart();
serverSock.Listen(100);
while(true)
{
SocketObject* ieSock=new SocketObject();
if(serverSock.Accept(*ieSock))
{
Thread serverThread(serverFunc,(void*)ieSock);
serverThread.ThreadStart();
}
}
controlThread.Join();
}
unsigned __stdcall serverFunc(void* param)
{
char buf[65535];
SocketObject* ieSock=(SocketObject*)param;
int len=0;
len=ieSock->Recv(buf,sizeof(buf));
SocketObject clientSock;
clientSock.Create(AF::af_inet,SOCKTYPE::sock_stream,PROTOCAL::ipproto_ip);
if(clientSock.Connect((char*)proxyaddr.c_str(),proxyPort))
{
//cout<<">连接成功!"<<endl;
}
else
{
cout<<">连接失败!"<<endl;
delete ieSock;
ieSock=NULL;
return 0;
}
if(clientSock.Send(fuckDRCOM,sizeof(fuckDRCOM))<=0)
{
delete ieSock;
ieSock=NULL;
return 0;
}
if(clientSock.Send(buf,len)<=0)
{
delete ieSock;
ieSock=NULL;
return 0;
}
fd_set readSet;
while(true)
{
FD_ZERO(&readSet);
FD_SET(ieSock->skSocket,&readSet);
FD_SET(clientSock.skSocket,&readSet);
if(select(0,&readSet,NULL,NULL,NULL))
{
if(FD_ISSET(clientSock.skSocket,&readSet))
{
int len=clientSock.Recv(buf,sizeof(buf));
if(len)
{
if(len>=4 && memcmp(fuckDRCOM,buf,4)==0)
{
}
else
{
if(ieSock->Send(buf,len)<=0)
break;
}
//cout.write(buf,len);
}
else
break;
}
if(FD_ISSET(ieSock->skSocket,&readSet))
{
int len=ieSock->Recv(buf,sizeof(buf));
if(len)
{
if(clientSock.Send(buf,len)<=0)
break;
//cout.write(buf,len);
//cout<<"发送有用消息成功"<<endl;
}
else
break;
//cout<<"接收数据成功"<<endl;
}
}
}
delete ieSock;
ieSock=NULL;
return 0;
}
unsigned __stdcall threadSourceCleanFunc(void* param)
{
//ThreadGroup* threadGroup=(ThreadGroup*) param;
//Sourceshare lock;
//lock.GetMutex(threadGroup->mutex);
return 0;
}
unsigned __stdcall controlFunc(void* param)
{
while(true)
{
string com;
cout<<">";
getline(cin,com);
operateCom(com);
}
return 0;
}
unsigned help(string& param)
{
cout<<"如发现问题请截图并描述一下发到xuhui122000@yahoo.con.cn"<<endl;
cout<<" by 徐晖"<<endl;
return 0;
}
string getFuncName(string& com)
{
regex expression("([^ ]+) *",regbase::icase);
smatch matchStr;
string::const_iterator beg=com.begin();
string::const_iterator end=com.end();
regex_search(beg,end,matchStr,expression);
return matchStr[1].str();
}
vector<string> getFuncParam(string& com)
{
vector<string> params;
regex expression("[^ ]+ ([^ ]+) *",regbase::icase);
//regex expression1("setPort ([~ ]*?) *",regbase::icase);
smatch matchStr;
string::const_iterator beg=com.begin();
string::const_iterator end=com.end();
regex_search(beg,end,matchStr,expression);
params.push_back(matchStr[1].str());
return params;
}
void initCom()
{
//coms.insert(Pair("list",(void*)listUsers));
//coms.insert(Pair("setPort",(void*)setPort));
//coms.insert(Pair("setCapacity",(void*)setCapacity));
coms.insert(Pair("help",(void*)help));
}
unsigned operateCom(string& com)
{
map<string,void*>::const_iterator iter;
//cout<<getFuncName(com)<<endl;
iter=coms.find(getFuncName(com));
if(iter==coms.end())
{
cout<<"错误的命令,请输入help查询帮助!"<<endl;
}
else
((COMMAND)((*iter).second))(com);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -