testtls.c
上传用户:knt0001
上传日期:2022-01-28
资源大小:264k
文件大小:2k
源码类别:

Email客户端

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <dstring.h>
  3. #include <dnet.h>
  4. void
  5. getSmtpCommands(dsocket *sd)
  6. {
  7. int err;
  8. size_t wlen;
  9. char wbuf[4096]={0}, rbuf[4096]={0};
  10. while (1) {
  11. printf("smtp> ");
  12. fgets(wbuf, sizeof(wbuf), stdin);
  13. if (strncasecmp(wbuf, "quit", 4) == 0) {
  14. break;
  15. }
  16. wlen = strlen(wbuf);
  17. wbuf[wlen-1] = '';
  18. strncat(wbuf, "rn", sizeof(wbuf));
  19. wlen += 1;
  20. if (dnetWrite(sd, wbuf, wlen) == -1) {
  21. printf("SSL Write error.nt");
  22. break;
  23. }
  24. err = dnetRead(sd, rbuf, sizeof(rbuf)-1);
  25. if (err == -1) {
  26. printf("dnetRecv Error.n");
  27. break;
  28. }
  29. rbuf[err] = '';
  30. printf("<-- %sn", rbuf);
  31. memset(rbuf, '', sizeof(rbuf));
  32. memset(wbuf, '', sizeof(wbuf));
  33. }
  34. }
  35. int main(int argc, char **argv)
  36. {
  37. dsocket *sd=NULL;
  38. char *put=NULL;
  39. char *server=NULL;
  40. uint port;
  41. char buf[4096] = {0};
  42. if (argc != 3) {
  43. printf("%s server portn", argv[0]);
  44. exit(1);
  45. } else {
  46. server = argv[1];
  47. port = atoi(argv[2]);
  48. }
  49. // The next function doesn't have to be called unless we want
  50. // to specify our own get password function. Otherwise OpenSSL
  51. // will prompt the user on the cmd line.
  52. // SSL_CTX_set_default_passwd_cb(ctx, getPassword);
  53. /* END Init SSL/TLS */
  54. sd = dnetConnect(server, port);
  55. if (!sd) {
  56. perror("Coulnd't connect to server.");
  57. return 1;
  58. }
  59. dnetRead(sd, buf, sizeof(buf)-1);
  60. printf("<-- %s", buf);
  61. put = "EHLO snaghosting.comrn";
  62. dnetWrite(sd, put, strlen(put));
  63. printf("--> %s", put);
  64. memset(buf, '', sizeof(buf));
  65. dnetRead(sd, buf, sizeof(buf)-1);
  66. printf("<-- %sn", buf);
  67. put = "STARTTLSrn";
  68. dnetWrite(sd, put, strlen(put));
  69. printf("--> %s", put);
  70. memset(buf, '', sizeof(buf));
  71. dnetRead(sd, buf, sizeof(buf)-1);
  72. printf("--> %s", buf);
  73. memset(buf, '', sizeof(buf));
  74. if (dnetUseTls(sd) == ERROR) {
  75. printf("TLS Connection failed miserably.n");
  76. dnetClose(sd);
  77. return 1;
  78. }
  79. if (dnetVerifyCert(sd) == ERROR) {
  80. printf("Couldn't verify peer certificate.n");
  81. dnetClose(sd);
  82. return 1;
  83. }
  84. /* Do cert verification stuff here. */
  85. getSmtpCommands(sd);
  86. dnetWrite(sd, "QUITrn", 6);
  87. dnetClose(sd);
  88. return 0;
  89. }