bool Auth(CSocket* socket,CDlgMain* dlg,char* buffer,bool auth_use,CString cauth_login,CString cauth_pass) { Send(socket,dlg,"EHLO mozilla"); Receive(socket,dlg,buffer); char* auth_login = StringToChar(cauth_login); int auth_login_len = strlen(auth_login); char* auth_pass = StringToChar(cauth_pass); int auth_pass_len = strlen(auth_pass); int auth2_len = 2+auth_login_len+auth_pass_len; char* auth2 = new char[auth2_len]; auth2[0] = '\0'; memcpy(&(auth2[1]),auth_login,auth_login_len); auth2[1+auth_login_len] = '\0'; memcpy(&(auth2[2+auth_login_len]),auth_pass,auth_pass_len); CString auth = Base64Encode((unsigned char*)auth2,auth2_len); char* auth3 = StringToChar(auth); Send(socket,dlg,"AUTH PLAIN"); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"334")!=0) return false; Send(socket,dlg,(const char*)auth3); Receive(socket,dlg,buffer); return (strcmp((const char*)MidStr(buffer,0,3),"235")==0); }
void NewCookie(CURL* curl) { CString cookie = _T("cookie/cookie"); CString cookie2; CString cookie3 = _T(".txt"); int cookie4 = int(time(NULL)); cookie2.Format(_T("%d"),cookie4); cookie = cookie+cookie2+cookie3; char* cookie_file = StringToChar(cookie); //MessageBox(cookie); curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookie_file); curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookie_file); curl_easy_setopt(curl, CURLOPT_COOKIESESSION, true); }
// Convert UTF-8 string "src" into the ASCII-7 string with // graphically similar characters -- using StringToChar(). // Return resulting ASCII-7 string. // string StringToAscii(const string& src, bool ascii_table) { string dst; // String to result char ch; // Temporary UTF symbol code size_t utf_len; // Length of UTF symbol size_t src_len; // Length source string src_len = src.size(); for (size_t i = 0; i < src_len; ) { // Process one UTF character ch = StringToChar(src.data() + i, &utf_len, ascii_table); // Add character to the result vector if ( ch != kSkipChar ) dst += ch; i += utf_len; } return dst; }
CString GetDomain(CString& src) { CString result; char* address = StringToChar(src); bool is_ip = true; int i=0; while(address[i]!='\0') { if((address[i]!='.')||((address[i]<'0')&&(address[i]>'9'))) { is_ip = false; break; } i++; } if(is_ip) result = src; else { int dots = 0; int i=strlen(address)-1; while(i>=0) { if(address[i]=='.') dots++; if(dots==2) break; i--; } char* addr = MidStr(address,i+1,strlen(address)); CString dom(addr); result = dom; } return result; }
void CArecsDlg::OnBnClickedButton3() { // TODO: Add your control notification handler code here CString filters = _T("Text files (*.txt)|*.txt|All Files (*.*)|*.*||"); CFileDialog fileDlg(TRUE,_T("Text files (*.txt)"), _T("*.txt"), OFN_FILEMUSTEXIST| OFN_HIDEREADONLY,filters,this); if(fileDlg.DoModal()==IDOK) { CString path = fileDlg.GetPathName(); dict.RemoveAll(); int i; FILE * pFile; char* result; char line[1024+1]; pFile = fopen(StringToChar(path), "r"); if(pFile!=NULL) { while(true) { result = fgets(line,1024,pFile); i=0; while((line[i]!='\0')&&(line[i]!='\r')&&(line[i]!='\n')) i++; line[i] = '\0'; dict.AddTail(CharToString(line)); if (feof(pFile)) break; } fclose(pFile); } } }
bool BlacklistTest(CDlgMain* dlg,CURL* curl,thread_status* this_struct) { dlg->console+=_T("\r\n*Retrieving Blacklist record."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); CURLcode result; CString temp = _T("q="); CString temp2; temp+=dlg->res_domain;//GetDomain(dlg->settings->server_address); //temp+=_T("&check=check"); SetCurlUrl(curl,"http://www.blacklistalert.org/"); CleanData(this_struct); result = curl_easy_perform(curl); //<input type=hidden name="PHPSESSID" value="1885fc88a84fee781f38ef97da59386f"> int af = FindStr(this_struct->data,"name=\"PHPSESSID\" value=\"",0); int af2 = FindStr(this_struct->data,"\">",af); CString sess = CharToString(MidStr(this_struct->data,af+24,af2)); temp+=_T("&PHPSESSID=")+sess; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, StringToChar(temp)); SetCurlUrl(curl,"http://www.blacklistalert.org/"); CleanData(this_struct); result = curl_easy_perform(curl); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ""); if((this_struct->data==NULL)) { //dlg->MessageBox(_T("Unable to retrieve blacklist records")); dlg->result_blacklistednum = _T("?"); dlg->console+=_T("\r\nUnable to get Blacklist record."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); } else { int pos1 = FindStr(this_struct->data,"(Alphabetic order):</b><br>",0); int pos1end = FindStr(this_struct->data,"<hr>",pos1+10); int pos2 = FindStr(this_struct->data,"(Alphabetic order)</b><br>",pos1end); int pos2end = FindStr(this_struct->data,"<hr>",pos2+10); if((pos1==-1)||(pos1end==-1)||(pos2==-1)||(pos2end==-1)) { dlg->result_blacklistednum = _T("?"); dlg->result_blacklist = _T("?"); dlg->console+=_T("\r\nUnable to get Blacklist record."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); } else { int pos4 = 0, pos5 = 0, pos6 = pos1+26, pos7 = 0, pos8 = 0, pos9 = 0; bool ok; bool no_result; int c_ok = 0; int c_listed = 0; int count = 0; int index = 0; while((pos4!=-1)&&(pos6<pos2end)) // < !!!!!!!!!!!!!!!!!!! { pos4 = FindStr(this_struct->data,"<br>",pos6); if(pos4==pos1end-4) pos4 = FindStr(this_struct->data,"<br>",pos2+26); else if(pos4==pos2end-4) break; pos5 = FindStr(this_struct->data,"<font color=",pos4); temp = MidStr(this_struct->data,pos4+4,pos5-1); index = dlg->blacklist.InsertItem(dlg->blacklist.GetItemCount(),temp); pos6 = FindStr(this_struct->data,">",pos5+5); pos7 = FindStr(this_struct->data,"</em>",pos6); pos8 = FindStr(this_struct->data,"href=\"",pos6); pos9 = FindStr(this_struct->data,"\">",pos8); // is blacklsited or not ok = (strcmp((const char*)MidStr(this_struct->data,pos5+12,pos6),"green")==0); no_result = (strcmp((const char*)MidStr(this_struct->data,pos5+12,pos6),"magenta")==0); if(ok) { dlg->blacklist.SetItemText(index,1,_T("OK")); c_ok++; } else if(no_result) { dlg->blacklist.SetItemText(index,1,_T("NO RESULT")); } else { dlg->blacklist.SetItemText(index,1,_T("LISTED")); c_listed++; if(pos8<pos7) { CString temp3(MidStr(this_struct->data,pos8+6,pos9)); dlg->blacklist.SetItemText(index,2,temp3); } } count++; temp.Format(_T("%d"),c_listed); temp2.Format(_T("%d"),count); temp+=_T("/"); temp+=temp2; dlg->result_blacklistednum = temp; dlg->UpdateData(FALSE); } if(c_listed) dlg->result_blacklist = _T("YES"); else dlg->result_blacklist = _T("NO"); dlg->console+=_T("\r\nSuccess."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); } } return true; }
bool AttachmentTest(CSocket* socket,CDlgMain* dlg,char* buffer,CDlgSettings* dlg2) { bool filtering = false; dlg->console+=_T("\r\n*Starting Attachment filtering Test."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); if(dlg2->auth_use) { if(!Auth(socket,dlg,buffer,dlg2->auth_use,dlg2->set_authuser,dlg2->set_authpass)) { dlg->result_attachm = _T("?"); dlg->MessageBox(_T("Couldn't test attachment filtering because provided authentication data are incorrect")); return false; } } else { Send(socket,dlg,"HELO mozilla"); Receive(socket,dlg,buffer); } CString temp, temp2; char* msg; temp = dlg2->set_attach_path; temp+= _T("/*.*"); char* path = StringToChar(temp); CFileFind Finder; BOOL found1 = Finder.FindFile(temp); DWORD Error1 = GetLastError(); DWORD Error2 = -1; BOOL found2 = TRUE; CString sName = _T("(not found)"); int check = 0; CString sEncoded; char* encoded; if(found1) { while(found2) { check++; found2 = Finder.FindNextFile(); Error2 = GetLastError(); if(!Finder.IsDirectory()) { sName = Finder.GetFileName(); FILE* pFile; long fSize; char* fbuffer; size_t fresult; temp = dlg2->set_attach_path; temp+= _T("/"); temp+=sName; msg = StringToChar(temp); pFile = fopen((const char*)msg,"rb"); if(!pFile) { dlg->result_attachm = _T("?"); dlg->UpdateData(FALSE); ScrollToBottom(dlg); dlg->MessageBox(_T("Attachment filtering test error: Unable to open file")); break; } else { fseek(pFile , 0 , SEEK_END); fSize = ftell(pFile); rewind(pFile); fbuffer = new char[fSize]; fresult = fread(fbuffer,1,fSize,pFile); fclose (pFile); sEncoded = Base64Encode((unsigned char*)fbuffer,fSize); free (fbuffer); Send(socket,dlg,"RSET"); Receive(socket,dlg,buffer); temp = _T("MAIL FROM:<"); temp+=dlg2->set_attach_from; temp+=_T(">"); msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")!=0) { dlg->result_attachm = _T("?"); dlg->UpdateData(FALSE); dlg->MessageBox(_T("Attachment filtering test error: Bad FROM field")); break; } else // [FROM] OK { temp = _T("RCPT TO:<"); temp+=dlg2->set_attach_to; temp+=_T(">"); msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")!=0) { dlg->result_attachm = _T("?"); dlg->UpdateData(FALSE); dlg->MessageBox(_T("Attachment filtering test error: Bad RCPT TO field")); break; } else // [TO] OK { Send(socket,dlg,"DATA"); Receive(socket,dlg,buffer); Send(socket,dlg,"MIME-Version: 1.0"); temp = _T("From: "); temp+=dlg2->set_attach_from; msg = StringToChar(temp); Send(socket,dlg,msg); temp = _T("To: "); temp+=dlg2->set_attach_to; msg = StringToChar(temp); Send(socket,dlg,msg); temp = _T("Subject: Check Nr "); temp2.Format(_T("%d"),check); temp+=temp2; temp+= _T(" with \""); temp+=sName; temp+= _T("\""); msg = StringToChar(temp); Send(socket,dlg,msg); Send(socket,dlg,"Content-Type: multipart/mixed; boundary=\"xxxHELLOxWORLDxxx\""); Send(socket,dlg,""); Send(socket,dlg,"I am MIME message."); Send(socket,dlg,"--xxxHELLOxWORLDxxx"); Send(socket,dlg,"Content-type: text/plain;"); Send(socket,dlg,""); Send(socket,dlg,"SMTP Tool test."); Send(socket,dlg,"--xxxHELLOxWORLDxxx"); Send(socket,dlg,"Content-Type: application/octet-stream"); Send(socket,dlg,"Content-Transfer-Encoding: base64"); temp = _T("Content-Disposition: attachment; filename=\""); temp+=sName; temp+= _T("\""); msg = StringToChar(temp); Send(socket,dlg,msg); Send(socket,dlg,""); // data encoded = StringToChar(sEncoded); Send(socket,dlg,encoded); delete encoded; Send(socket,dlg,"--xxxHELLOxWORLDxxx--"); Send(socket,dlg,""); Send(socket,dlg,"."); Receive(socket,dlg,buffer); filtering = (strcmp((const char*)MidStr(buffer,0,3),"250")!=0); if(filtering) { //break; } if((dlg2->set_attach_delay!=_T(""))||(dlg2->set_attach_delay!=_T("0"))) { temp = _T("\r\nWaiting "); int ag = _wtoi(dlg2->set_attach_delay); temp2.Format(_T("%d"),ag); temp+=temp2; temp+= _T(" seconds..."); dlg->console+=temp; dlg->UpdateData(FALSE); ScrollToBottom(dlg); Sleep(ag*1000); } } } } } } } if(dlg->result_attachm!=_T("?")) dlg->result_attachm = filtering?_T("YES"):_T("NO"); Send(socket,dlg,"QUIT"); Receive(socket,dlg,buffer); return true; }
bool PostAbuseTest(CSocket* socket,CDlgMain* dlg,char* buffer,CDlgSettings* dlg2,int mode) { Send(socket,dlg,"HELO mozilla"); Receive(socket,dlg,buffer); CString domain = dlg->res_domain;//GetDomain(dlg->settings->server_address); bool from = true; bool to_post = true; bool to_abuse = true; for(int i=mode;i<mode+1;i++) { /* if(i==1) { Send(socket,dlg,"RSET"); Receive(socket,dlg,buffer); }*/ CString temp,temp2; char* msg; UINT port = 25; temp = _T("MAIL FROM:<"); temp+=dlg2->set_fromabuseverify; temp+=_T(">"); msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")!=0) from = false; else { temp = _T("RCPT TO:<"); temp+=i?_T("abuse"):_T("postmaster"); temp+=_T("@"); temp+=domain; temp+=_T(">"); msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")!=0) { if(i) to_abuse = false; else to_post = false; } else { } } } if(from==true) { if(!mode) dlg->result_postmaster = to_post?_T("YES"):_T("NO"); if(mode) dlg->result_abuse = to_abuse?_T("YES"):_T("NO"); } else { dlg->MessageBox(_T("Couldn't test postmaster/abuse as FROM field is incorrect")); if(!mode) dlg->result_postmaster = _T("?"); if(mode) dlg->result_abuse = _T("?"); } return true; }
bool VerifyTest(CSocket* socket,CDlgMain* dlg,char* buffer,CDlgSettings* dlg2) { dlg->console+=_T("\r\n*Starting Verify Command Test."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); CString temp; CString domain = dlg->res_domain;//GetDomain(dlg->settings->server_address); char* msg; Send(socket,dlg,"HELO mozilla"); Receive(socket,dlg,buffer); temp = _T("VRFY "); temp+=_T("frankblack"); temp+=_T("@"); temp+=domain; msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); bool verify = ((strcmp((const char*)MidStr(buffer,0,3),"502")!=0)&&(strcmp((const char*)MidStr(buffer,0,3),"252")!=0)); bool from = true; if(!verify) { Send(socket,dlg,"RSET"); Receive(socket,dlg,buffer); temp = _T("MAIL FROM:<"); temp+=dlg2->set_fromabuseverify; temp+=_T(">"); msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")!=0) from = false; else { temp = _T("RCPT TO:<"); temp+=_T("userdhdrhanonexistafw"); temp+=_T("@"); temp+=domain; temp+=_T(">"); msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); POSITION lpos = dlg->rcptto_list.GetHeadPosition(); verify = false; CString rcp; for(int k=0;k<dlg->rcptto_list.GetCount();k++) { rcp = dlg->rcptto_list.GetNext(lpos); if(FindStr(buffer,StringToChar(rcp),0)!=-1) { verify = true; break; } } //verify = (FindStr(buffer,"5.3.0",0)!=-1); } } if(!from) { dlg->MessageBox(_T("Couldn't test verify as FROM field is incorrect")); dlg->result_veriify = _T("?"); } else dlg->result_veriify = verify?_T("YES"):_T("NO"); return verify; }
bool SpoofingTest(CSocket* socket,CDlgMain* dlg,char* buffer,int which,CDlgSettings* dlg2) { bool spoofing = true; dlg->console+=(which==1)?_T("\r\n*Starting Spoofing Test."):_T("\r\n*Starting Spoofing check 2."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); if((which==2)&&(dlg2->auth_use)) { if(!Auth(socket,dlg,buffer,dlg2->auth_use,dlg2->set_authuser,dlg2->set_authpass)) { dlg->result_spoofing1 = _T("?"); dlg->MessageBox(_T("Couldn't test spoofing because provided authentication data are incorrect")); return false; } } else { Send(socket,dlg,"HELO mozilla"); Receive(socket,dlg,buffer); } CString temp; char* msg; temp = _T("MAIL FROM:<"); temp+=dlg2->set_spoofing_mailfrom; temp+=_T(">"); msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")!=0) spoofing = false; else { temp = _T("RCPT TO:<"); temp+=dlg2->set_spoofing_rpctto; temp+=_T(">"); msg = StringToChar(temp); Send(socket,dlg,msg); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")!=0) spoofing = false; else { Send(socket,dlg,"DATA"); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"354")!=0) spoofing = false; else { temp = _T("From: "); temp+=dlg2->set_spoofing_from; msg = StringToChar(temp); Send(socket,dlg,msg); temp = _T("To: "); temp+=dlg2->set_spoofing_to; msg = StringToChar(temp); Send(socket,dlg,msg); temp = _T("Reply-to: "); temp+=dlg2->set_spoofing_replyto; msg = StringToChar(temp); Send(socket,dlg,msg); temp = _T("Subject: "); temp+=dlg2->set_spoofing_subject; msg = StringToChar(temp); Send(socket,dlg,msg); Send(socket,dlg,""); POSITION lpos = dlg2->set_spoofing_message_list.GetHeadPosition(); CString line; for(int k=0;k<dlg2->set_spoofing_message_list.GetCount();k++) { line = dlg2->set_spoofing_message_list.GetNext(lpos); msg = StringToChar(line); Send(socket,dlg,msg); } Send(socket,dlg,"."); Receive(socket,dlg,buffer); spoofing = (strcmp((const char*)MidStr(buffer,0,3),"250")==0); Send(socket,dlg,"QUIT"); Receive(socket,dlg,buffer); } } } if(which==1) dlg->result_spoofing1 = spoofing?_T("YES"):_T("NO"); else dlg->result_spoofing2 = spoofing?_T("YES"):_T("NO"); return true; }
bool RelayTest(CSocket* socket,CDlgMain* dlg,char* buffer,CDlgSettings* dlg2) { CString msg,temp; dlg->console+=_T("\r\n*Starting Open Relay Test."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); msg = _T("HELO "); msg+=dlg2->set_relayfrom2; Send(socket,dlg,StringToChar(msg)); Receive(socket,dlg,buffer); bool open_relay = false; bool test_open[20]; bool from_ok, to_ok; UINT port = 25; // smtp port memset(test_open,0,20); if(!(socket->GetPeerName(temp,port))) ShowError(socket,dlg); for(int i=1;i<=20;i++) { from_ok = false; to_ok = false; Sleep(CMD_DELAY); Send(socket,dlg,"RSET"); Receive(socket,dlg,buffer); msg = _T("MAIL FROM:<"); if(i!=4) msg+=dlg2->set_relayfrom1; if((i!=4)&&(i!=3)) msg+=_T("@"); if((i>=7)||(i==5)) { msg+=_T("["); msg+=temp; msg+=_T("]"); } if(i==6) { msg+=_T("www."); msg+=dlg->res_domain;//dlg->settings->server_address; // not always domain } if((i==1)||(i==2)) msg+=dlg2->set_relayfrom2; msg+=_T(">"); Send(socket,dlg,StringToChar(msg)); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")==0) from_ok = true; msg = _T("RCPT TO:"); if(i!=2) msg+=_T("<"); if((i==9)||(i==10)||(i==12)) msg+=_T("\""); if((i==14)||(i==15)) msg+=_T("@"); if(i==15) { msg+=_T("www."); msg+=dlg->res_domain;//dlg->settings->server_address; // not always domain } if(i==14) { msg+=_T("["); msg+=temp; msg+=_T("]"); } if((i==14)||(i==15)) msg+=_T(":"); if((i<=15)||(i==19)||(i==20)) msg+=dlg2->set_relayto1; if((i==7)||(i==8)||(i==10)||(i==19)) msg+=_T("%"); if((i==11)||(i==12)||(i==13)||(i==20)) msg+=_T("@"); if( (i==7) || (i==8) || ((i>=10)&&(i<=13)) || (i>=16) ) msg+=dlg2->set_relayto2; if((i>=16)&&(i<=18)) { msg+=_T("!"); msg+=dlg2->set_relayto1; } if(i==12) msg+=_T("\""); if((i!=10)&&(i!=16)) msg+=_T("@"); if((i==7)||(i==11)||(i==12)||(i==17)) { msg+=_T("["); msg+=temp; msg+=_T("]"); } if((i==8)||(i==13)||(i==18)) { msg+=_T("www."); msg+=dlg->res_domain;//dlg->settings->server_address; // not always domain } if((i<=6)|| (i==9) || (i==14) || (i==15)) msg+=dlg2->set_relayto2; if((i==9)||(i==10)) msg+=_T("\""); if(i!=2) msg+=_T(">"); Send(socket,dlg,StringToChar(msg)); Receive(socket,dlg,buffer); if(strcmp((const char*)MidStr(buffer,0,3),"250")==0) to_ok = true; if(from_ok&&to_ok) { open_relay = true; test_open[i-1] = true; } dlg->result_3openrelay.Format(_T("%d"),i*5); dlg->result_3openrelay+=_T("%"); dlg->UpdateData(FALSE); ScrollToBottom(dlg); //Sleep(CMD_DELAY); } //Sleep(CMD_DELAY); //Send(socket,dlg,"QUIT"); //Receive(socket,dlg,buffer); // test_open if(open_relay) dlg->result_3openrelay = _T("YES"); else dlg->result_3openrelay = _T("NO"); dlg->UpdateData(FALSE); ScrollToBottom(dlg); return open_relay; }
DWORD WINAPI RunTests(LPVOID lpParam) { thread_data* data = (thread_data*)lpParam; CDlgMain* dlg = data->Dlgmain; CDlgSettings* dlg2 = data->Dlgsettings; //CResultsDlg* dlg = data->result_dlg; char buffer[SOCK_BUFFER+1]; CString msg; dlg->console+=_T("\r\nTest started."); dlg->UpdateData(FALSE); ScrollToBottom(dlg); AfxSocketInit(); CSocket* socket = NULL; curl_global_init(CURL_GLOBAL_ALL); CURL* curl = curl_easy_init(); thread_status* this_struct = new thread_status; this_struct->bufferlen = 0; this_struct->initialized = false; this_struct->data = NULL; this_struct->writepos = 0; curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunction); curl_easy_setopt(curl,CURLOPT_WRITEDATA, (void *) &this_struct); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT,25); curl_easy_setopt(curl, CURLOPT_TIMEOUT,30); CString cookie = _T("cookie/cookie"); CString cookie2; CString cookie3 = _T(".txt"); int cookie4 = int(time(NULL)); cookie2.Format(_T("%d"),cookie4); cookie = cookie+cookie2+cookie3; char* cookie_file = StringToChar(cookie); //MessageBox(cookie); curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookie_file); curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookie_file); curl_easy_setopt(curl, CURLOPT_COOKIESESSION, true); for(int GG=0;GG<1;GG++) // to make cancel possible { if(socket = Connect(socket,dlg,buffer,false,dlg2)) { dlg->result_1ismailserver = _T("YES"); int pos1 = FindStr(buffer,"Version",0); int pos2; if(pos1!=-1) { pos2 = FindStr(buffer," ",pos1+7+2); if(pos2==-1) pos2 = FindStr(buffer,"\r",pos1+7+2); dlg->result_2version = CharToString(MidStr(buffer,pos1+7+1,pos2)); } dlg->UpdateData(FALSE); ScrollToBottom(dlg); if(CheckIfCancelled(dlg)) break; // OPEN RELAY if(dlg->test_openrelay) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Open Relay Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); RelayTest(socket,dlg,buffer,dlg2); } if(CheckIfCancelled(dlg)) break; /// VERIFY COMMAND TEST if(dlg->test_verify) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Verify Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); VerifyTest(socket,dlg,buffer,dlg2); } if(CheckIfCancelled(dlg)) break; /// POSTMAN/ABUSE TEST if(dlg->test_postmaster) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Postman Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); PostAbuseTest(socket,dlg,buffer,dlg2,0); } if(CheckIfCancelled(dlg)) break; if(dlg->test_abuse) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Abuse Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); PostAbuseTest(socket,dlg,buffer,dlg2,1); } if(CheckIfCancelled(dlg)) break; /// ATTACHMENT TEST // (with server change) if(dlg->test_attachments) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Attachment Test ------------------"); CString temp = dlg2->set_serveraddress; dlg2->set_serveraddress = dlg2->set_authserver; socket = Connect(socket,dlg,buffer,false,dlg2); dlg2->set_serveraddress = temp; AttachmentTest(socket,dlg,buffer,dlg2); } if(CheckIfCancelled(dlg)) break; /// SPOOFING TEST if(dlg->test_spoofing1) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Spoofing 1 Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); SpoofingTest(socket,dlg,buffer,1,dlg2); } if(CheckIfCancelled(dlg)) break; /// SPOOFING TEST 2 // (with server change) if(dlg->test_spoofing2) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Spoofing 2 Test ------------------"); CString temp = dlg2->set_serveraddress; dlg2->set_serveraddress = dlg2->set_authserver; socket = Connect(socket,dlg,buffer,false,dlg2); dlg2->set_serveraddress = temp; SpoofingTest(socket,dlg,buffer,2,dlg2); } if(CheckIfCancelled(dlg)) break; /// HELP TEST if(dlg->test_help) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Help Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); HelpTest(socket,dlg,buffer); } if(CheckIfCancelled(dlg)) break; /// ENCRYPTED AUTH if(dlg->test_encauth) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Encry.Auth Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); EhloTest(socket,dlg,buffer,1); } if(CheckIfCancelled(dlg)) break; /// CLEARTEXT if(dlg->test_cleartext) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Cleartext Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); EhloTest(socket,dlg,buffer,2); } if(CheckIfCancelled(dlg)) break; /// SASL if(dlg->test_sasl) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ SASL Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); EhloTest(socket,dlg,buffer,3); } if(CheckIfCancelled(dlg)) break; /// AUTH if(dlg->test_auth) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Auth. Test ------------------"); socket = Connect(socket,dlg,buffer,false,dlg2); EhloTest(socket,dlg,buffer,4); } if(CheckIfCancelled(dlg)) break; } else { dlg->result_1ismailserver = _T("NO"); dlg->UpdateData(FALSE); ScrollToBottom(dlg); } if(dlg->test_spf) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ SPF Test ------------------"); SpfTest(dlg,curl,this_struct); } if(dlg->test_blacklist) { dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\n------------------ Blacklist Test ------------------"); BlacklistTest(dlg,curl,this_struct); } } // end GG delete socket; dlg->console+=_T("\r\n-----------------------------------------------------"); dlg->console+=_T("\r\nTEST COMPLETED."); dlg->GetDlgItem(IDC_BUTTON7)->EnableWindow(TRUE); dlg->GetDlgItem(IDC_BUTTON8)->EnableWindow(TRUE); dlg->GetDlgItem(IDC_BUTTON3)->SetWindowTextW(_T("Run")); dlg->GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE); dlg->running = FALSE; dlg->want_cancel = FALSE; dlg->UpdateData(FALSE); ScrollToBottom(dlg); return 0; }
void SetCurlUrl(CURL* curl,CString& url) { char* urlc = StringToChar(url); curl_easy_setopt(curl, CURLOPT_URL,urlc); delete[] urlc; }
// [[ VisibleForTesting ]] bool ParseCalloutNetLine(const string& ss, net_call_out_rec* con) { if (ss.empty() || ss[0] != '@') { // skip empty lines and those not starting with @. return false; } con->min_hr = -1; con->max_hr = -1; for (auto iter = ss.cbegin(); iter != ss.cend(); iter++) { switch (*iter) { case '@': { con->sysnum = StringToUnsignedShort(string(++iter, ss.end())); } break; case '&': con->options |= options_sendback; break; case '-': con->options |= unused_options_ATT_night; break; case '_': con->options |= unused_options_ppp; break; case '+': con->options |= options_no_call; break; case '~': con->options |= options_receive_only; break; case '!': { con->options |= options_once_per_day; con->times_per_day = std::max<uint8_t>(1, StringToUnsignedChar(string(++iter, ss.end()))); } break; case '%': { con->macnum = StringToUnsignedChar(string(++iter, ss.end())); } break; case '/': { con->call_anyway = StringToUnsignedChar(string(++iter, ss.end())); if (con->call_anyway > 0) { // Let's set a minimum of 10 minutes in between calls. con->call_anyway = std::max<uint8_t>(con->call_anyway, 10); } } break; case '#': { con->call_x_days = StringToUnsignedChar(string(++iter, ss.end())); } break; case '(': { con->min_hr = StringToChar(string(++iter, ss.end())); } break; case ')': { con->max_hr = StringToChar(string(++iter, ss.end())); } break; case '|': { con->min_k = std::max<uint16_t>(1, StringToUnsignedShort(string(++iter, ss.end()))); } break; case ';': con->options |= unused_options_compress; break; case '^': con->options |= unused_options_hslink; break; case '$': con->options |= unused_options_force_ac; break; case '=': con->options |= options_hide_pend; break; case '*': con->options |= unused_options_dial_ten; break; case '\"': { ++iter; // skip past first " string password; while (iter != ss.end() && *iter != '\"') { password.push_back(*iter++); } if (!password.empty() && password.back() == '\"') { // remove trailing " password.pop_back(); } strncpy(con->password, password.c_str(), sizeof(con->password)); } break; default: break; } } return true; }
void CCharVariable::SetString(const CString& Value) { m_Value = StringToChar(Value); }
char CStringVariable::GetChar(void) const { return StringToChar(m_Value); }