Advertisement
Guest User

Untitled

a guest
Apr 21st, 2013
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.85 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <stdio.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include <malloc.h>
  9. #include <time.h>
  10.  
  11. char* replace(const char* s, const char* find, const char* replace)
  12. {
  13.     const char* p;
  14.     char* ret;
  15.  
  16.     p = strstr(s, find);
  17.  
  18.     if (p == NULL)
  19.         return NULL;
  20.  
  21.     ret = malloc(strlen(s) + strlen(replace) + 1 - strlen(find));
  22.  
  23.     if (ret == NULL)
  24.         return NULL;
  25.  
  26.     if (p != s)
  27.         strncpy(ret, s, p-s);
  28.  
  29.     strcpy(ret + (p-s), replace);
  30.     strcat(ret, p + strlen(find));
  31.  
  32.     return ret;
  33. }
  34.  
  35.  
  36. main()
  37. {
  38.  int server_socket, neuer_socket;
  39.  int laenge, anzahl;
  40.  struct sockaddr_in serverinfo, clientinfo;
  41.  char empfangene_zeichen[1000];
  42.  char web_seite[1000];
  43.  int i, mail_empfang,x, gothelo, fails;
  44.  unsigned short int portnummer = 25;
  45.  char ip_adresse[] = "INADDR_ANY";
  46.  char *msg_get;
  47.    
  48. struct tm *zeit;
  49.    time_t sekunde;
  50.    char time_str[80];
  51.    time(&sekunde);
  52.    zeit = localtime(&sekunde);
  53.  
  54.     fails = 0;
  55.  
  56.  FILE *datei;
  57.  mail_empfang = 0;
  58.  gothelo = 0;
  59.  printf("\n Server: socket()...");
  60.  
  61.  server_socket = socket(AF_INET, SOCK_STREAM, 0);
  62.  
  63.  serverinfo.sin_family = AF_INET;
  64.  serverinfo.sin_addr.s_addr = htonl(INADDR_ANY);
  65.  serverinfo.sin_port = htons(portnummer);
  66.  laenge = sizeof(serverinfo);
  67.  
  68.  printf("\n Server: bind()...");
  69.  
  70.  bind(server_socket, (struct sockaddr *)&serverinfo, laenge);
  71.  
  72.  printf("\n Server: listen()...");
  73.  printf("\n Server mit IP %s",ip_adresse);
  74.  printf(" an Port %d wartet...",portnummer);
  75.  
  76.  listen(server_socket, 3);
  77.  
  78. wait_again:;
  79.  
  80. while(1)
  81. {
  82.    strftime(time_str, 80, "%a, %d %b %Y %H:%M:%S",zeit);
  83.  
  84.     printf("\n Server: accept()...");
  85.     neuer_socket = accept(server_socket, (struct sockaddr *)&clientinfo, &laenge);
  86.         printf("Verbindung mit %s\n\n\n",inet_ntoa(clientinfo.sin_addr));
  87.         sprintf(web_seite, "220 mindcode.ath.cx MindCode ESMTP MAIL service ready at %s +0001\n", time_str);
  88.  
  89.     write(neuer_socket,web_seite,strlen(web_seite));
  90.         printf("\n SEND > 220 mindcode.ath.cx MindCode ESMTP MAIL service ready at %s +0001\n", time_str);
  91.        
  92.         if(neuer_socket > 0)
  93.             break;
  94. //TODO: select();
  95. }
  96.  
  97.  while(1)
  98.    {
  99.  
  100.  
  101. new_line:;
  102.  
  103.  
  104.  
  105.     anzahl = read(neuer_socket,empfangene_zeichen,sizeof(empfangene_zeichen));
  106.         empfangene_zeichen[anzahl-1]=0;
  107.  
  108.         printf("%s\n", empfangene_zeichen);
  109.        
  110.         if(mail_empfang == 1)
  111.                 {
  112.        
  113.                             if(strncmp(empfangene_zeichen, "QUIT",4) == 0 || strncmp(empfangene_zeichen, "quit",4) == 0)
  114.                                     {
  115.                                     goto skip;
  116.                                     }
  117.                        
  118.  
  119.  
  120.             msg_get = replace(empfangene_zeichen, "\n", "<br><br>");
  121.    
  122.             for(i = 0; i < 12; i++)
  123.             {
  124.                 msg_get = replace(msg_get, "\n", "<br>");
  125.                 }
  126.  
  127. // Wahrscheinlich: Wenn kein \n mehr vorhanden, stürzt er ab...
  128.  
  129.                 datei = fopen ("fakemail.html", "a");
  130.                 fprintf (datei, msg_get);
  131.                 fprintf (datei, "<br>");
  132.                 fclose(datei);
  133.               skip:;
  134.             }
  135.  
  136.  
  137.         if(strstr( empfangene_zeichen, "HELO" ))
  138.          {
  139.             sprintf(web_seite,"250 OK\n");
  140.             write(neuer_socket,web_seite,strlen(web_seite));
  141.                 printf("\n SEND > 250 OK\n");
  142.                 gothelo = 1;           
  143.                 goto new_line;
  144.         }
  145.  
  146.         if( strstr( empfangene_zeichen, "EHLO" ))
  147.          {
  148.             sprintf(web_seite,"502 5.5.2 Error: command not recognized\n");
  149.             write(neuer_socket,web_seite,strlen(web_seite));
  150.                 printf("\n SEND > 502 5.5.2 Error: command not recognized\n");
  151.                 goto new_line;
  152.         }
  153.  
  154.      
  155.         if( strstr( empfangene_zeichen, "MAIL" ) || strstr( empfangene_zeichen, "mail" ))
  156.          {
  157.             sprintf(web_seite,"250 OK\n");
  158.             write(neuer_socket,web_seite,strlen(web_seite));
  159.                 printf("\n SEND > 250 OK\n");
  160.                 gothelo == 0;
  161.             goto new_line;
  162.         }
  163.  
  164.         if( strstr( empfangene_zeichen, "RCPT" ) || strstr( empfangene_zeichen, "rcpt" ))
  165.          {
  166.             sprintf(web_seite,"250 OK\n");
  167.             write(neuer_socket,web_seite,strlen(web_seite));
  168.                 printf("\n SEND > 250 OK\n");
  169.             goto new_line;
  170.         }
  171.  
  172.             if( strstr( empfangene_zeichen, "DATA" ) || strstr( empfangene_zeichen, "data" ))
  173.          {
  174.             sprintf(web_seite,"354 Start mail input; end with <CRLF>.<CRLF>.\n");
  175.             write(neuer_socket,web_seite,strlen(web_seite));
  176.                 printf("\n SEND > 354 Start mail input; end with <CRLF>.<CRLF>.\n");
  177.  
  178.                 datei = fopen ("fakemail.html", "a");
  179.  
  180.                 fprintf (datei, "<b><font color=\"green\">---------------- NEW MAIL ----------------<br><br></font></b>");
  181.  
  182.                 fclose(datei);     
  183.                
  184.                 mail_empfang = 1;
  185.             goto new_line;
  186.         }
  187.    
  188.        
  189.             if( strstr( empfangene_zeichen, "QUIT" ) || strstr( empfangene_zeichen, "quit" ))
  190.          {
  191.                 if(gothelo == 1)
  192.                     {
  193.                     sprintf(web_seite,"500 You had nothing to say? Idiot!\n");
  194.                 write(neuer_socket,web_seite,strlen(web_seite));
  195.                 gothelo == 0;
  196.                     }          
  197.            
  198.                 sprintf(web_seite,"221 Have a nice day :-)\n");
  199.             write(neuer_socket,web_seite,strlen(web_seite));
  200.             printf("\n SEND > 221 Have a nice day :-)\n");
  201.             printf(" Server: close()... Beendet %s\n\n\n",inet_ntoa(clientinfo.sin_addr));
  202.         close(neuer_socket);
  203.                 neuer_socket = 0;
  204.             datei = fopen ("fakemail.html", "a");
  205.             fprintf (datei, "<br><b><font color=\"green\">---------------- END MAIL ----------------<br><br></font></b>");
  206.                 fclose(datei);                     
  207.  
  208.                 mail_empfang = 0;
  209.            
  210.  
  211.                 goto wait_again;
  212.         }
  213.  
  214.  
  215.         fails +=1;
  216.  
  217.                 if(fails == 7)
  218.                     {
  219.             sprintf(web_seite,"421 4.7.0 You are stupid, get lost!\n");
  220.             write(neuer_socket,web_seite,strlen(web_seite));
  221.                 printf("\n SEND > 421 4.7.0 You are stupid, get lost!\n");
  222.             printf(" Server: close()... Beendet %s\n\n\n",inet_ntoa(clientinfo.sin_addr));
  223.         close(neuer_socket);
  224.                 neuer_socket = 0;
  225.                 fails = 0;
  226.         goto wait_again;
  227.                     }
  228.  
  229.             sprintf(web_seite,"500 5.5.2 Error: What the fuck?\n");
  230.             write(neuer_socket,web_seite,strlen(web_seite));
  231.                 printf("\n SEND > 500 5.5.2 Error: What the fuck?\n");
  232.  
  233.   }  
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement