SMTP in C problema connessione TLS

di il
4 risposte

SMTP in C problema connessione TLS

Questo è il codice della mia bozza client socket. Prende come argomento il nome mnemonico di un server smtp come smtp.gmail.com e si connette alla porta 25. Comincia l'handshaking con il solito "HELO" o "EHLO", ma durante la fase di autenticazione "AUTH LOGIN" mi chiede di stabilire una connessione TLS.
Volevo creare un semplice programma in C che mi permettesse di mandare email ma ora penso che non sia tanto banale.
Adesso vado a studiarmi l'handshaking del TLS dagli RFC oppure abbanono l'idea e trovo una libreria precotta?
Cerco consigli.


#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <netdb.h> 


int main(int argc, char const *argv[])
{
  int sockfd, port=25, ret;
  char buffer[254];
  char *b = buffer;
  struct sockaddr_in serv_addr;
  struct hostent *server;

  sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if ( sockfd < 1) exit -1;

  server = gethostbyname(argv[1]);
  if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }

  bzero((char *) &serv_addr, sizeof(serv_addr));
  serv_addr.sin_family = AF_INET;
  bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
  serv_addr.sin_port = htons(port);

  if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");

  read(sockfd,buffer,sizeof(buffer));
  printf("%s\n",buffer);
  bzero(buffer,sizeof(buffer));

  write(sockfd,"EHLO\n",sizeof("EHLO\n")-1);

  read(sockfd,buffer,sizeof(buffer));
  printf("%s\n",buffer);
  bzero(buffer,sizeof(buffer));
  
  write(sockfd,"AUTH LOGIN\n",sizeof("AUTH LOGIN\n")-1);

  read(sockfd,buffer,sizeof(buffer));
  printf("%s\n",buffer);
  bzero(buffer,sizeof(buffer));
  
  printf("END\n");
    
   return 0;
}

4 Risposte

  • Re: SMTP in C problema connessione TLS

    Libreria precotta, ovviamente!
    Cercati i sorgenti di sendmail, per avere un'idea della complessita'.
  • Re: SMTP in C problema connessione TLS

    Ho visto tante implementazioni client socket del SMTP senza l'utilizzo di un SSL e non so come facciano a funzionare.
    Ho capito anche che il funzionamento di un SSL implica il dover sapere concetti di crittografia e capire un handshaking più complesso.
    Ora il mio quesito è questo: imparando dall'RFC tutto il funzionamento del SSL e implementando le varie funzioni sulla crittografia da utilizzare nel momento opportuno, è fattibile? Didatticamente utile?
  • Re: SMTP in C problema connessione TLS

    Fattibile ... ma in quanti medi?

    Didatticamente utile ... tutto è utile ma impiegare tanto tempo in un solo progetto no.
  • Re: SMTP in C problema connessione TLS

    Medi sta per rimedi o diti?
    Comunque è per scendere in profondità e capire meglio i meccanismi che si innescano sotto la punta dell'iceberg!!

    Poi oggi l'ho fatto in Java in una ventina di righe facilotto facilotto.
    E' brutto realizzare un programma in C, che utilizza un modulo mail-sender in Java?
    Si utilizza l'accoppiamento tra moduli di linguaggi differenti??
Devi accedere o registrarti per scrivere nel forum
4 risposte