Descripción:
PROYECTO DE SMTP EN LINUX PROGRAMADO EN C USANDO API DE SOCKET, DOS VERSIONES: PARA SOCKETS UDP Y TCP
Entorno de desarrollo
Estación de trabajo Linux
API de Sockets
Lenguaje de programación C
Especificaciones del protocolo
El servidor que vamos a realizar se corresponde con el protocolo SMTP originalmente definido en la RFC 821 ([login to view URL]). No obstante, nuestro servidor no implementará todo el protocolo, sino únicamente un subconjunto muy reducido de éste. Además, SMTP se proporciona sobre TCP pero nosotros realizaremos también una versión para UDP.
Mensaje de petición del cliente
El dialogo con el servidor comienza con la orden HELO. A continuación se envía un correo con tres pasos. En el primero se especifica la orden MAIL con información del destinatario, a continuación una serie de uno o más receptores con la orden RCPT y por último el contenido del mensaje con la orden MAIL. Si no se desea enviar más correos se finaliza con la orden QUIT
La órden HELO se forma:
HELO sender-domain[CRLF]
La órden MAIL se forma:
MAIL FROM:reverse-path[CRLF]
Donde reverse-path es el correo electrónico del originador, y [CRLF] los caracteres de retorno de carro y salto de línea.
La orden RCPT:
RCPT TO:forward-path[CRLF]
Donde forward-path es el correo electrónico del receptor.
La órden DATA:
DATA[CRLF]
...
[CRLF].[CRLF]
Los puntos suspensivos serán el texto del mensaje que finaliza cuando se mande una línea que sólo contenga un punto.
Se pueden enviar los correos que se desee hasta que se finaliza con la orden QUIT.
Mensaje de respuesta del servidor
Algunos de los valores son:
220 Simple Mail Transfer Service Ready (Respuesta cuando el cliente realiza la conexión)
250 OK (Respuesta correcta a las ordenes MAIl, RCPT, DATA)
354 Start mail input; end with. (Respuesta al envio de la orden DATA)
221 Service closing transmission channel (Respuesta a la orden QUIT)
500 Syntax error (Respuesta a errores de sintaxis en cualquier orden)
Ejemplo de dialogo
(S: Servidor, C: Cliente)
S:220 nombre-equipo SMTP
C: HOLA [login to view URL]
S: 500 Syntax error
C: HELO [login to view URL]
S: 250 nombre-equipo HELO
C: MAIL FROM pepe
S: 500 Syntax error
C: MAIL FROM:Smith@[login to view URL]
S: 250 OK
C: RCPT TO:Jones@[login to view URL]
S: 250 OK
C: RCPT TO:Brown@[login to view URL]
S: 250 OK
C: DATOS
S: 500 Syntax error
C: DATA
S: 354 Start mail input; end with.
C: Bla bla bla...
C: ...etc. etc. etc.
C:.
S: 250 OK
C: QUIT
S: 221 nombre-equipo closing connection
Programa Servidor
Aceptará peticiones de sus clientes tanto en TCP como en UDP.
Registrará todas las peticiones en un fichero de "log" llamado [login to view URL] el que anotará:
Comunicación realizada: nombre del host, dirección IP, protocolo de transporte, nº de puerto efímero del cliente y la fecha y hora a la que se ha producido.
Una línea por cada mensaje recibido indicando todos sus datos y si se ha recibido correctamente o en caso contrario especificar la causa del error.
Se ejecutará como un daemon.
Programa Cliente
Se conectará con el servidor bien con TCP o UDP.
Leerá por parámetros el nombre del servidor de la siguiente forma:
cliente nombre_o_IP_del_servidor TCP
Realizará peticiones al servidor como se ha indicado anteriormente.
Realizará las acciones oportunas para su correcta finalización.
Durante la fase de pruebas el cliente podrá ejecutarse como se muestra en el ejemplo de diálogo, pero en la versión para entregar el cliente leerá de un fichero las órdenes que ha de ejecutar ([login to view URL]) y escribirá las respuestas obtenidas del servidor y los mensajes de error y/o depuración en un fichero con nombre el número del puerto efímero y extensión txt.
Hola señor,
Somos una empresa india de desarrollo de base. hemos comprobado sus datos publicados y queremos más aclaraciones, así que envíenos un mensaje para que lo analicemos. Gracias.,./.,
Hey !
I'm SAYAN PROGRAMMER
I've reviewed your complete job description, and I fulfill all the qualifications required for this project.
I have more than 15 years of experience in this field.
I am sure if you will respond me then I will be able to explain my skills as well.
I always try to provide good quality work to my clients.
My key skills are:
C #, C + +, C programming, Linux ,Python, Ubuntu, Software Architecture, PHP and much more.
Looking forward to work with you on this project.
THANKS
Regards
SAYAN PROGRAMMER