From bf2f7248da38704c807f16603e2209359ab4004d Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 15 Dec 2015 11:00:58 +0100 Subject: [PATCH] =?UTF-8?q?R=C3=A9cup=C3=A8re=20le=20r=C3=A9sultat=20du=20?= =?UTF-8?q?LS=20+=20reste=20=C3=A0=20l'afficher=20et=20bien=20le=20redirig?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SEQUENTIAL/backup/client.c | 64 ---- SEQUENTIAL/backup/proxy_aure.c | 336 ------------------ SEQUENTIAL/backup/serveur.c | 117 ------ SEQUENTIAL/proxy_ftp.c | 215 ----------- SEQUENTIAL/proxy_ftp.h | 39 -- SEQUENTIAL/test | Bin 18741 -> 0 bytes SEQUENTIAL/thread/SEQUENTIAL/backup/client.c | 64 ---- .../thread/SEQUENTIAL/backup/proxy_aure.c | 336 ------------------ SEQUENTIAL/thread/SEQUENTIAL/backup/serveur.c | 117 ------ SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.c | 215 ----------- SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.h | 39 -- SEQUENTIAL/thread/SEQUENTIAL/test | Bin 18741 -> 0 bytes SEQUENTIAL/thread/backup/client.c | 64 ---- SEQUENTIAL/thread/backup/proxy_aure.c | 336 ------------------ SEQUENTIAL/thread/backup/serveur.c | 117 ------ SEQUENTIAL/thread/main.c | 55 --- SEQUENTIAL/thread/proxy_ftp.c | 215 ----------- SEQUENTIAL/thread/proxy_ftp.h | 39 -- SEQUENTIAL/thread/test | Bin 18741 -> 0 bytes SEQUENTIAL/thread/thread/main.c | 55 --- SEQUENTIAL/thread/thread/test | Bin 8915 -> 0 bytes dep/server.c | 28 +- proxy_ftp.h | 4 +- test | Bin 18719 -> 22815 bytes testRemove.c | 0 25 files changed, 24 insertions(+), 2431 deletions(-) delete mode 100644 SEQUENTIAL/backup/client.c delete mode 100644 SEQUENTIAL/backup/proxy_aure.c delete mode 100644 SEQUENTIAL/backup/serveur.c delete mode 100644 SEQUENTIAL/proxy_ftp.c delete mode 100644 SEQUENTIAL/proxy_ftp.h delete mode 100755 SEQUENTIAL/test delete mode 100644 SEQUENTIAL/thread/SEQUENTIAL/backup/client.c delete mode 100644 SEQUENTIAL/thread/SEQUENTIAL/backup/proxy_aure.c delete mode 100644 SEQUENTIAL/thread/SEQUENTIAL/backup/serveur.c delete mode 100644 SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.c delete mode 100644 SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.h delete mode 100755 SEQUENTIAL/thread/SEQUENTIAL/test delete mode 100644 SEQUENTIAL/thread/backup/client.c delete mode 100644 SEQUENTIAL/thread/backup/proxy_aure.c delete mode 100644 SEQUENTIAL/thread/backup/serveur.c delete mode 100644 SEQUENTIAL/thread/main.c delete mode 100644 SEQUENTIAL/thread/proxy_ftp.c delete mode 100644 SEQUENTIAL/thread/proxy_ftp.h delete mode 100755 SEQUENTIAL/thread/test delete mode 100644 SEQUENTIAL/thread/thread/main.c delete mode 100755 SEQUENTIAL/thread/thread/test create mode 100644 testRemove.c diff --git a/SEQUENTIAL/backup/client.c b/SEQUENTIAL/backup/client.c deleted file mode 100644 index efd0a9f..0000000 --- a/SEQUENTIAL/backup/client.c +++ /dev/null @@ -1,64 +0,0 @@ -#include -#include -#include -#include -#include -#include -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 -#define MAXBUFFERLEN 1024 -int main(int argc, char* argv[]){ - int descSock; // Descripteur de la socket - int ecode; // Retour des fonctions - struct addrinfo *res; // Résultat de la focntion getaddrinfo - struct addrinfo hints = { // Cette structure permet de contrôler l'exécution de la fonction getaddrinfo - 0, - AF_INET, //seule les adresses IPv4 seront présentées par la fonctiongetaddrinfo - SOCK_STREAM, - 0, - 0, - NULL, - NULL, - NULL - }; - char serverName[MAXHOSTLEN]; // Nom de la machine serveur - char serverPort[MAXPORTLEN]; // Numéro de port - char buffer[MAXBUFFERLEN]; // buffer stockant les messages échangés entre le client et le serveur - //On teste les valeurs rentrées par l'utilisateur - if (argc != 3){ perror("Mauvaise utilisation de la commande: \n"); exit(1);} - if (strlen(argv[1]) >= MAXHOSTLEN){ perror("Le nom de la machine serveur est trop long\n"); exit(2);} - if (strlen(argv[2]) >= MAXPORTLEN){ perror("Le numero de port du serveur est trop long\n"); exit(2);} - strncpy(serverName, argv[1], MAXHOSTLEN); - serverName[MAXHOSTLEN-1] = '\0'; - strncpy(serverPort, argv[2], MAXPORTLEN); - serverPort[MAXPORTLEN-1] = '\0'; - //Création de la socket IPv4/TCP - descSock = socket(AF_INET, SOCK_STREAM, 0); - if (descSock == -1) { - perror("Erreur creation socket"); - exit(4); - } - //Récupération des informations sur le serveur - ecode = getaddrinfo(serverName,serverPort,&hints,&res); - if (ecode){ - fprintf(stderr,"getaddrinfo: %s\n", gai_strerror(ecode)); - exit(3); - } - //Connexion au serveur - ecode = connect(descSock, res->ai_addr, res->ai_addrlen); - if (ecode == -1) { - close(descSock); - freeaddrinfo(res); - perror("Erreur connect"); - exit(5); - } - freeaddrinfo(res); - //Echange de donneés avec le serveur - ecode = read(descSock, buffer, MAXBUFFERLEN); - if (ecode == -1) {perror("Problème de lecture\n"); exit(6);} - buffer[ecode] = '\0'; - printf("MESSAGE RECU DU SERVEUR: \"%s\".\n",buffer); - //Fermeture de la socket - close(descSock); -} - diff --git a/SEQUENTIAL/backup/proxy_aure.c b/SEQUENTIAL/backup/proxy_aure.c deleted file mode 100644 index 999e131..0000000 --- a/SEQUENTIAL/backup/proxy_aure.c +++ /dev/null @@ -1,336 +0,0 @@ -// Bibliothéques -// ============================================== - -#include -#include -#include -#include -#include - - -// Constantes -// ============================================== - -#define SERVADDR "127.0.0.1" // Définition de l'adresse IP d'écoute -#define SERVPORT "4444" // Définition du port d'écoute, si 0 port choisi dynamiquement -#define LISTENLEN 2 // Taille du tampon de demandes de connexions, MAX 2 -#define MAXBUFFERLEN 1024 -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 - - -// PROCEDURES -// ============================================== - -void decoupeLogin( char *entreeUtilisateur, char *login, char *server ); -void waitingForUser(int *socket,char *buffer,int *n); -void waitingForServer(int *socket,char *buffer,int *n); - - -// MAIN -// ============================================== - -int main( int argc, char *argv[] ) { - - // Variables [ SERVEUR ] >> [ PROXY ] - [ PROXY ] >> [ SERVEUR ] - // ============================================== - - int sockServeur; // Descripteur pour le socket - int fncRet; // Stock le retour des fonctions - struct addrinfo *resBIS; // Résultat de la focntion getaddrinfo - struct addrinfo hintsBIS = {0, AF_INET, SOCK_STREAM, 0, 0, NULL, NULL, NULL}; // Filtra pour le getaddrinfo - char bufferFTP[MAXBUFFERLEN]; - - // Variables [ CLIENT ] >> [ PROXY ] - [ PROXY ] >> [ CLIENT ] - // ============================================== - - char serverAddr[MAXHOSTLEN]; // Adresse du serveur - char serverPort[MAXPORTLEN]; // Port du server - char buffer[MAXBUFFERLEN]; // Tampon pour écrire sur le socket - char bufferRcv[MAXBUFFERLEN]; // Tampon pour écrire sur le socket - int descSockRDV; // Descripteur de socket de rendez-vous - int ecode; // Code retour des fonctions - int descSockCOM; // Descripteur de socket de communication - int n = 0; - int lenRCV = 0; - - - struct addrinfo hints; // Filtre pour la fonction get_addr_info - struct addrinfo *res; // Resultat get_addr_info - struct sockaddr_storage myinfo; // Informations sur la connexion de RDV - struct sockaddr_storage from; // Informations sur le client connecté - - - char entreeUtilisateur[40]; // login@server - char login[20]; // Isoler le login - char serveur[20]; // Isoler le serveur - - - socklen_t len = sizeof( struct sockaddr_storage ); // Variable utilisée pour stocker les longueurs des structures de socket - - pid_t pid; - - // Initialisation de la socket de RDV IPv4/TCP - - descSockRDV = socket( AF_INET, SOCK_STREAM, 0 ); - - // Mise à zéro de la variable hints,entreeUtilisateur,loggin.. - - memset( &hints, 0, sizeof( hints ) ); - memset( entreeUtilisateur, 0, sizeof( entreeUtilisateur ) ); - memset( login, 0, sizeof( login ) ); - memset( serveur, 0, sizeof( serveur ) ); - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - // Initailisation de la variable hints - - hints.ai_flags = AI_PASSIVE; // mode serveur, nous allons utiliser la fonction bind - hints.ai_socktype = SOCK_STREAM; // TCP - hints.ai_family = AF_INET; // IPv4 - - // Récupération des informations du serveur > Machine locale - - ecode = getaddrinfo( SERVADDR, SERVPORT, &hints, &res ); - - // Publication de la socket - - ecode = bind( descSockRDV, res->ai_addr, res->ai_addrlen ); - - ecode = listen( descSockRDV, LISTENLEN ); - - // Attente connexion du client - // Lorsque demande de connexion, creation d'un processus fils et d'un socket de communication avec le client, MAX 2 attentes - - while( 1 == 1 ) { - - descSockCOM = accept( descSockRDV, ( struct sockaddr * ) &from, &len ); - - if( ( pid= fork() ) == 0) { - - close( descSockRDV ); // On ferme le socketRDV on s'occupe seulement de gérer le socket actuel - - strcpy( buffer, "220 Bienvenue sur le proxyFTP de aurehacks\r\n" ); // Echange de données avec le client connecté - - send( descSockCOM, buffer, strlen( buffer ), 0 ); // Ecriture sur le socket - - while(1 == 1) { // Gestion des commandes - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // Gestion de l'authentification - // ============================================== - - if( strstr( bufferRcv,"USER") ) { - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - - decoupeLogin(bufferRcv,login,serveur); // On isole le loggin ainsi que l'IP/URL du serveur - - strcat(buffer,login); // On formate le login - - sockServeur = socket(AF_INET, SOCK_STREAM, 0); - - getaddrinfo(serveur,"21",&hints,&res); - - connect(sockServeur, res->ai_addr, res->ai_addrlen); - - - - // [1] Message de Bienvenue - // ============================================== - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - - // [2] Envoi de "USER login" - // ============================================== - - send( sockServeur, buffer, strlen( buffer ), 0 ); - send( sockServeur, "\r\n", 2, 0 ); - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - // [3] Réception du "331 password required" et transmission au client - // ============================================== - - strcpy( bufferFTP, "331 required password\r\n" ); // Cas special SINON ON EN DIRECT send( descSockCOM, strcat(bufferFTP,"\r\n"), strlen( bufferFTP ), 0 ); - - send( descSockCOM, bufferFTP, strlen( bufferFTP ), 0 ); - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // ============================================== - - - - // [4] Réception du "PASS mdp" (mot de passe du client) et transmission au serveur - // ============================================== - - send( sockServeur, bufferRcv, strlen( bufferRcv ), 0 ); - send( sockServeur, "\r\n", 2, 0 ); - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - - - // [5] Réception du "220 logged in" et transmission au client - // ============================================== - - strcpy( bufferFTP, "220 Logged IN !\r\n" ); // Cas special SINON ON EN DIRECT send( descSockCOM, strcat(bufferFTP,"\r\n"), strlen( bufferFTP ), 0 ); - - send( descSockCOM, bufferFTP, strlen( bufferFTP ), 0 ); - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // ============================================== - - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - - // Gestion du mode actif - // ============================================== - - if( strncmp( bufferRcv,"PORT", 4 ) ) { - - n = 0; - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - // Gestion du mode passif - // ============================================== - - if( strncmp( bufferRcv,"PASSV", 5 ) ) { - - n = 0; - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - // Gestion de la fermeture de session - // ============================================== - - - if( strncmp( bufferRcv,"QUIT", 4 ) ) { - - break; // On quitte la boucle lorsque que l'on reçoit la commande "QUIT" - } - - } - - freeaddrinfo(res); - - close( descSockCOM ); - close( sockServeur ); - - // Fin du fils - - exit(0); - } - } - - close( descSockRDV ); - - return 0; -} - -// decoupeLogin -// ============================================== - -void decoupeLogin( char *entreeUtilisateur, char *login, char *server ) { - - int i,j = 0; - - for( i=0; i -#include -#include -#include -#include -#define SERVADDR "127.0.0.1" // Définition de l'adresse IP d'écoute -#define SERVPORT "0" // Définition du port d'écoute, si 0 port choisi dynamiquement -#define LISTENLEN 1 // Taille du tampon de demande de connexion -#define MAXBUFFERLEN 1024 -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 - - -int main(){ - int ecode; // Code retour des fonctions - char serverAddr[MAXHOSTLEN]; // Adresse du serveur - char serverPort[MAXPORTLEN]; // Port du server - int descSockRDV; // Descripteur de socket de rendez-vous - int descSockCOM; // Descripteur de socket de communication - struct addrinfo hints; // Contrôle la fonction getaddrinfo - struct addrinfo *res; // Contient le résultat de la fonction getaddrinfo - struct sockaddr_storage myinfo; // Informations sur la connexion de RDV - struct sockaddr_storage from; // Informations sur le client connecté - socklen_t len; // Variable utilisée pour stocker les - // longueurs des structures de socket - char buffer[MAXBUFFERLEN]; // Tampon de communication entre le client et le serveur - // Initialisation de la socket de RDV IPv4/TCP - descSockRDV = socket(AF_INET, SOCK_STREAM, 0); - if (descSockRDV == -1) { - perror("Erreur création socket RDV\n"); - exit(2); - } - // Publication de la socket au niveau du système - // Assignation d'une adresse IP et un numéro de port - // Mise à zéro de hints - memset(&hints, 0, sizeof(hints)); - // Initailisation de hints - hints.ai_flags = AI_PASSIVE; // mode serveur, nous allons utiliser la fonction bind - hints.ai_socktype = SOCK_STREAM; // TCP - hints.ai_family = AF_INET; // seules les adresses IPv4 seront présentées par - // la fonction getaddrinfo - - // Récupération des informations du serveur - ecode = getaddrinfo(SERVADDR, SERVPORT, &hints, &res); - if (ecode) { - fprintf(stderr,"getaddrinfo: %s\n", gai_strerror(ecode)); - exit(1); - } - // Publication de la socket - ecode = bind(descSockRDV, res->ai_addr, res->ai_addrlen); - if (ecode == -1) { - perror("Erreur liaison de la socket de RDV"); - exit(3); - } - // Nous n'avons plus besoin de cette liste chainée addrinfo - freeaddrinfo(res); - // Récuppération du nom de la machine et du numéro de port pour affichage à l'écran - - - - - - - - - - len=sizeof(struct sockaddr_storage); - ecode=getsockname(descSockRDV, (struct sockaddr *) &myinfo, &len); - if (ecode == -1) - { - perror("SERVEUR: getsockname"); - exit(4); - } - ecode = getnameinfo((struct sockaddr*)&myinfo, sizeof(myinfo), serverAddr,MAXHOSTLEN, - serverPort, MAXPORTLEN, NI_NUMERICHOST | NI_NUMERICSERV); - if (ecode != 0) { - fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(ecode)); - exit(4); - } - printf("L'adresse d'ecoute est: %s\n", serverAddr); - printf("Le port d'ecoute est: %s\n", serverPort); - - - - - - // Definition de la taille du tampon contenant les demandes de connexion - ecode = listen(descSockRDV, LISTENLEN); - if (ecode == -1) { - perror("Erreur initialisation buffer d'écoute"); - exit(5); - } - while( 1 ){ - - - - len = sizeof(struct sockaddr_storage); - // Attente connexion du client - // Lorsque demande de connexion, creation d'une socket de communication avec le client - descSockCOM = accept(descSockRDV, (struct sockaddr *) &from, &len); - if (descSockCOM == -1){ - perror("Erreur accept\n"); - exit(6); - } - // Echange de données avec le client connecté - strcpy(buffer, "BLABLABLA\n"); - - write(descSockCOM, buffer, strlen(buffer)); - //Fermeture de la connexion - close(descSockCOM); - - } - close(descSockRDV); -} - - - diff --git a/SEQUENTIAL/proxy_ftp.c b/SEQUENTIAL/proxy_ftp.c deleted file mode 100644 index ce414b7..0000000 --- a/SEQUENTIAL/proxy_ftp.c +++ /dev/null @@ -1,215 +0,0 @@ -#include "proxy_ftp.h" - -// DECLARATIONS -static pthread_t userServer; -static short unsigned int userServerState = 1; -static char remoteAssignedPort[maxPortLen] = {'\0'}; - -/* headers */ -static void* testClient(char* host, char* port); -static void* testServer(); -static void* testClientFTP(); - - - - - - - - - - - -/*****************/ -/* CORPS DU PROG */ -/*****************/ -int main(int argc, char* argv[]){ - - /* client */ - if( argc > 2 && strcmp(argv[1],"c") == 0 ) - testClient("localhost", argv[2]); - - /* server */ - else if( argc > 1 && strcmp(argv[1], "s") == 0 ) - testServer(); - - /* clientFTP */ - else if( argc > 1 && strcmp(argv[1], "f") == 0 ) - testClientFTP(); - - /* client + server (multithread) */ - else if( argc > 1 && strcmp(argv[1], "both") == 0 ){ - - pthread_create(&userServer, NULL, &testServer, (void*) NULL); - - // on attends d'avoir le port - while( strlen(remoteAssignedPort) == 0 ); - - // on lance le client en boucle - while( strlen(remoteAssignedPort) != 0 ) - testClient("localhost", remoteAssignedPort); - - pthread_join(userServer, (void*) NULL); - pthread_exit((void*) userServer); - - } - - return EXIT_SUCCESS; -} - - - - - - - - - - - -static void* testClientFTP(){ - CLIENT_FTPREQUEST(FTP_HOST, FTP_PORT); - return; - - // char request[maxBuffLen]; - // char* response; - - // while( 1 ){ - // // on vide les buffers - // memset(&request, '\0', sizeof(request)); - // memset(&response, '\0', sizeof(response)); - - // printf("> "); - // read_stdin(request, maxBuffLen); - // // on supprime le dernier retour chariot - // // request[strlen(request)-1] == '\0'; - - - - // CLIENT_REQUEST(FTP_HOST, FTP_PORT, request, &response); - - // if( strlen(response) > 0 ) - // printf("%s\n", response); - - // response = NULL; - // } - - // return; -} - - -static void* testClient(char* host, char* port){ - char request[maxBuffLen]; - char* response; - - // on vide les buffers - memset(&request, '\0', sizeof(request)); - memset(&response, '\0', sizeof(response)); - - printf("> "); - read_stdin(request, maxBuffLen); - // on supprime le dernier retour chariot - // request[strlen(request)-1] == '\0'; - - - - // CLIENT_REQUEST(remoteHost, remotePort, "GET / HTTP/1.0\r\n\r\n", &response); - CLIENT_REQUEST(host, port, request, &response); - - if( strlen(response) > 0 ) - printf("%s\n", response); - - response = NULL; - - return; -} - - - - -static void* testServer(){ - int SOCKET; // contiendra la connection en cours - char BUFFER[maxBuffLen]; // contiendra le BUFFER - struct sockaddr_storage clientInfo; // contiendra les infos client - char repeat; // sert à sortir de la boucle - int nbReceived, nbSend; // contiendra les nb reçu && envoyé - socklen_t len = sizeof(struct sockaddr_storage); - - // retour de @DROP_SERVER - char* serverPort; // contiendra le port - int LISTENSOCK; // contiendra la socket d'écoute - - - /* [0] On lance @DROP_SERVER - ==========================================================*/ - DROP_SERVER(remoteHost, &serverPort, &LISTENSOCK); - - printf("Port: %s\n", serverPort); - strcpy(remoteAssignedPort, serverPort);// PORT GLOBAL - - while( userServerState ){ - - /* [1] Attente d'une demande de connection, puis création d'une socket - ============================================================================*/ - SOCKET = accept(LISTENSOCK, (struct sockaddr *) &clientInfo, &len); - - if( DEBUGMOD ) printf("SOCKET: %d\n", SOCKET); - - /* [2] On récupère les données reçues - ============================================================================*/ - nbReceived = read(SOCKET, BUFFER, sizeof(BUFFER)-1); - - if( DEBUGMOD ) printf("Recu: %d\n", nbReceived); - if( DEBUGMOD ) printf("Message: %s\n", BUFFER); - - /* [3] Redirection vers le serveur FTP - ============================================================================*/ - // on redirige la réponse vers le serveur FTP distant - char* ftp_response; - CLIENT_REQUEST(FTP_HOST, FTP_PORT, BUFFER, &ftp_response); - // printf("===FTP===\n%s\n", ftp_response); - - /* [4] On analyse et renvoie la réponse à l'utilisateur - ============================================================================*/ - // formatBuffer(ftp_response); - // MANAGE_RESPONSE(&SOCKET, ftp_response); - - // on réponds au client - formatBuffer(ftp_response); - write(SOCKET, ftp_response, strlen(ftp_response)-1); - - - /* [5] On ferme la SOCKET et vide les buffers - ============================================================================*/ - close(SOCKET); - memset(&BUFFER, '\0', sizeof(BUFFER)); // on vide le buffer - ftp_response = NULL; - - - } - - close(LISTENSOCK); - strcpy(remoteAssignedPort, "\0"); -} - - -/* -* DROP_SERVER -* INIT_CLIENT -* -* while(){ -* accept(); -* send -* } -* -* EXIT_CLIENT -* HALT_SERVER -* -* -* -* -* -* -* -* -*/ \ No newline at end of file diff --git a/SEQUENTIAL/proxy_ftp.h b/SEQUENTIAL/proxy_ftp.h deleted file mode 100644 index 0ff6983..0000000 --- a/SEQUENTIAL/proxy_ftp.h +++ /dev/null @@ -1,39 +0,0 @@ -/* global */ -#include -#include -#include -#include - -/* sys */ -#include -#include - -/* socket */ -#include -#include // getaddrinfo, getnameinfo -#include - -/* basis */ -#define TRUE 1 -#define FALSE 0 - - -/* debug */ -// #define DEBUGMOD FALSE // TRUE = débugmode activé -#define DEBUGMOD TRUE // TRUE = débugmode activé - -/* vars */ -#define remoteHost "localhost" -#define remotePort "80" -#define maxBuffLen 4096 -#define maxListLen 2 -#define maxHostLen 64 -#define maxPortLen 6 - -#define FTP_HOST "31.170.164.47" -#define FTP_PORT "21" - -/* local dependencies */ -#include "dep/utility.c" -#include "dep/client.c" -#include "dep/server.c" diff --git a/SEQUENTIAL/test b/SEQUENTIAL/test deleted file mode 100755 index 798442f9ab5aa6c00ac2f83845a0b5036fa68373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18741 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 diff --git a/SEQUENTIAL/thread/SEQUENTIAL/backup/client.c b/SEQUENTIAL/thread/SEQUENTIAL/backup/client.c deleted file mode 100644 index efd0a9f..0000000 --- a/SEQUENTIAL/thread/SEQUENTIAL/backup/client.c +++ /dev/null @@ -1,64 +0,0 @@ -#include -#include -#include -#include -#include -#include -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 -#define MAXBUFFERLEN 1024 -int main(int argc, char* argv[]){ - int descSock; // Descripteur de la socket - int ecode; // Retour des fonctions - struct addrinfo *res; // Résultat de la focntion getaddrinfo - struct addrinfo hints = { // Cette structure permet de contrôler l'exécution de la fonction getaddrinfo - 0, - AF_INET, //seule les adresses IPv4 seront présentées par la fonctiongetaddrinfo - SOCK_STREAM, - 0, - 0, - NULL, - NULL, - NULL - }; - char serverName[MAXHOSTLEN]; // Nom de la machine serveur - char serverPort[MAXPORTLEN]; // Numéro de port - char buffer[MAXBUFFERLEN]; // buffer stockant les messages échangés entre le client et le serveur - //On teste les valeurs rentrées par l'utilisateur - if (argc != 3){ perror("Mauvaise utilisation de la commande: \n"); exit(1);} - if (strlen(argv[1]) >= MAXHOSTLEN){ perror("Le nom de la machine serveur est trop long\n"); exit(2);} - if (strlen(argv[2]) >= MAXPORTLEN){ perror("Le numero de port du serveur est trop long\n"); exit(2);} - strncpy(serverName, argv[1], MAXHOSTLEN); - serverName[MAXHOSTLEN-1] = '\0'; - strncpy(serverPort, argv[2], MAXPORTLEN); - serverPort[MAXPORTLEN-1] = '\0'; - //Création de la socket IPv4/TCP - descSock = socket(AF_INET, SOCK_STREAM, 0); - if (descSock == -1) { - perror("Erreur creation socket"); - exit(4); - } - //Récupération des informations sur le serveur - ecode = getaddrinfo(serverName,serverPort,&hints,&res); - if (ecode){ - fprintf(stderr,"getaddrinfo: %s\n", gai_strerror(ecode)); - exit(3); - } - //Connexion au serveur - ecode = connect(descSock, res->ai_addr, res->ai_addrlen); - if (ecode == -1) { - close(descSock); - freeaddrinfo(res); - perror("Erreur connect"); - exit(5); - } - freeaddrinfo(res); - //Echange de donneés avec le serveur - ecode = read(descSock, buffer, MAXBUFFERLEN); - if (ecode == -1) {perror("Problème de lecture\n"); exit(6);} - buffer[ecode] = '\0'; - printf("MESSAGE RECU DU SERVEUR: \"%s\".\n",buffer); - //Fermeture de la socket - close(descSock); -} - diff --git a/SEQUENTIAL/thread/SEQUENTIAL/backup/proxy_aure.c b/SEQUENTIAL/thread/SEQUENTIAL/backup/proxy_aure.c deleted file mode 100644 index 999e131..0000000 --- a/SEQUENTIAL/thread/SEQUENTIAL/backup/proxy_aure.c +++ /dev/null @@ -1,336 +0,0 @@ -// Bibliothéques -// ============================================== - -#include -#include -#include -#include -#include - - -// Constantes -// ============================================== - -#define SERVADDR "127.0.0.1" // Définition de l'adresse IP d'écoute -#define SERVPORT "4444" // Définition du port d'écoute, si 0 port choisi dynamiquement -#define LISTENLEN 2 // Taille du tampon de demandes de connexions, MAX 2 -#define MAXBUFFERLEN 1024 -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 - - -// PROCEDURES -// ============================================== - -void decoupeLogin( char *entreeUtilisateur, char *login, char *server ); -void waitingForUser(int *socket,char *buffer,int *n); -void waitingForServer(int *socket,char *buffer,int *n); - - -// MAIN -// ============================================== - -int main( int argc, char *argv[] ) { - - // Variables [ SERVEUR ] >> [ PROXY ] - [ PROXY ] >> [ SERVEUR ] - // ============================================== - - int sockServeur; // Descripteur pour le socket - int fncRet; // Stock le retour des fonctions - struct addrinfo *resBIS; // Résultat de la focntion getaddrinfo - struct addrinfo hintsBIS = {0, AF_INET, SOCK_STREAM, 0, 0, NULL, NULL, NULL}; // Filtra pour le getaddrinfo - char bufferFTP[MAXBUFFERLEN]; - - // Variables [ CLIENT ] >> [ PROXY ] - [ PROXY ] >> [ CLIENT ] - // ============================================== - - char serverAddr[MAXHOSTLEN]; // Adresse du serveur - char serverPort[MAXPORTLEN]; // Port du server - char buffer[MAXBUFFERLEN]; // Tampon pour écrire sur le socket - char bufferRcv[MAXBUFFERLEN]; // Tampon pour écrire sur le socket - int descSockRDV; // Descripteur de socket de rendez-vous - int ecode; // Code retour des fonctions - int descSockCOM; // Descripteur de socket de communication - int n = 0; - int lenRCV = 0; - - - struct addrinfo hints; // Filtre pour la fonction get_addr_info - struct addrinfo *res; // Resultat get_addr_info - struct sockaddr_storage myinfo; // Informations sur la connexion de RDV - struct sockaddr_storage from; // Informations sur le client connecté - - - char entreeUtilisateur[40]; // login@server - char login[20]; // Isoler le login - char serveur[20]; // Isoler le serveur - - - socklen_t len = sizeof( struct sockaddr_storage ); // Variable utilisée pour stocker les longueurs des structures de socket - - pid_t pid; - - // Initialisation de la socket de RDV IPv4/TCP - - descSockRDV = socket( AF_INET, SOCK_STREAM, 0 ); - - // Mise à zéro de la variable hints,entreeUtilisateur,loggin.. - - memset( &hints, 0, sizeof( hints ) ); - memset( entreeUtilisateur, 0, sizeof( entreeUtilisateur ) ); - memset( login, 0, sizeof( login ) ); - memset( serveur, 0, sizeof( serveur ) ); - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - // Initailisation de la variable hints - - hints.ai_flags = AI_PASSIVE; // mode serveur, nous allons utiliser la fonction bind - hints.ai_socktype = SOCK_STREAM; // TCP - hints.ai_family = AF_INET; // IPv4 - - // Récupération des informations du serveur > Machine locale - - ecode = getaddrinfo( SERVADDR, SERVPORT, &hints, &res ); - - // Publication de la socket - - ecode = bind( descSockRDV, res->ai_addr, res->ai_addrlen ); - - ecode = listen( descSockRDV, LISTENLEN ); - - // Attente connexion du client - // Lorsque demande de connexion, creation d'un processus fils et d'un socket de communication avec le client, MAX 2 attentes - - while( 1 == 1 ) { - - descSockCOM = accept( descSockRDV, ( struct sockaddr * ) &from, &len ); - - if( ( pid= fork() ) == 0) { - - close( descSockRDV ); // On ferme le socketRDV on s'occupe seulement de gérer le socket actuel - - strcpy( buffer, "220 Bienvenue sur le proxyFTP de aurehacks\r\n" ); // Echange de données avec le client connecté - - send( descSockCOM, buffer, strlen( buffer ), 0 ); // Ecriture sur le socket - - while(1 == 1) { // Gestion des commandes - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // Gestion de l'authentification - // ============================================== - - if( strstr( bufferRcv,"USER") ) { - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - - decoupeLogin(bufferRcv,login,serveur); // On isole le loggin ainsi que l'IP/URL du serveur - - strcat(buffer,login); // On formate le login - - sockServeur = socket(AF_INET, SOCK_STREAM, 0); - - getaddrinfo(serveur,"21",&hints,&res); - - connect(sockServeur, res->ai_addr, res->ai_addrlen); - - - - // [1] Message de Bienvenue - // ============================================== - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - - // [2] Envoi de "USER login" - // ============================================== - - send( sockServeur, buffer, strlen( buffer ), 0 ); - send( sockServeur, "\r\n", 2, 0 ); - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - // [3] Réception du "331 password required" et transmission au client - // ============================================== - - strcpy( bufferFTP, "331 required password\r\n" ); // Cas special SINON ON EN DIRECT send( descSockCOM, strcat(bufferFTP,"\r\n"), strlen( bufferFTP ), 0 ); - - send( descSockCOM, bufferFTP, strlen( bufferFTP ), 0 ); - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // ============================================== - - - - // [4] Réception du "PASS mdp" (mot de passe du client) et transmission au serveur - // ============================================== - - send( sockServeur, bufferRcv, strlen( bufferRcv ), 0 ); - send( sockServeur, "\r\n", 2, 0 ); - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - - - // [5] Réception du "220 logged in" et transmission au client - // ============================================== - - strcpy( bufferFTP, "220 Logged IN !\r\n" ); // Cas special SINON ON EN DIRECT send( descSockCOM, strcat(bufferFTP,"\r\n"), strlen( bufferFTP ), 0 ); - - send( descSockCOM, bufferFTP, strlen( bufferFTP ), 0 ); - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // ============================================== - - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - - // Gestion du mode actif - // ============================================== - - if( strncmp( bufferRcv,"PORT", 4 ) ) { - - n = 0; - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - // Gestion du mode passif - // ============================================== - - if( strncmp( bufferRcv,"PASSV", 5 ) ) { - - n = 0; - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - // Gestion de la fermeture de session - // ============================================== - - - if( strncmp( bufferRcv,"QUIT", 4 ) ) { - - break; // On quitte la boucle lorsque que l'on reçoit la commande "QUIT" - } - - } - - freeaddrinfo(res); - - close( descSockCOM ); - close( sockServeur ); - - // Fin du fils - - exit(0); - } - } - - close( descSockRDV ); - - return 0; -} - -// decoupeLogin -// ============================================== - -void decoupeLogin( char *entreeUtilisateur, char *login, char *server ) { - - int i,j = 0; - - for( i=0; i -#include -#include -#include -#include -#define SERVADDR "127.0.0.1" // Définition de l'adresse IP d'écoute -#define SERVPORT "0" // Définition du port d'écoute, si 0 port choisi dynamiquement -#define LISTENLEN 1 // Taille du tampon de demande de connexion -#define MAXBUFFERLEN 1024 -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 - - -int main(){ - int ecode; // Code retour des fonctions - char serverAddr[MAXHOSTLEN]; // Adresse du serveur - char serverPort[MAXPORTLEN]; // Port du server - int descSockRDV; // Descripteur de socket de rendez-vous - int descSockCOM; // Descripteur de socket de communication - struct addrinfo hints; // Contrôle la fonction getaddrinfo - struct addrinfo *res; // Contient le résultat de la fonction getaddrinfo - struct sockaddr_storage myinfo; // Informations sur la connexion de RDV - struct sockaddr_storage from; // Informations sur le client connecté - socklen_t len; // Variable utilisée pour stocker les - // longueurs des structures de socket - char buffer[MAXBUFFERLEN]; // Tampon de communication entre le client et le serveur - // Initialisation de la socket de RDV IPv4/TCP - descSockRDV = socket(AF_INET, SOCK_STREAM, 0); - if (descSockRDV == -1) { - perror("Erreur création socket RDV\n"); - exit(2); - } - // Publication de la socket au niveau du système - // Assignation d'une adresse IP et un numéro de port - // Mise à zéro de hints - memset(&hints, 0, sizeof(hints)); - // Initailisation de hints - hints.ai_flags = AI_PASSIVE; // mode serveur, nous allons utiliser la fonction bind - hints.ai_socktype = SOCK_STREAM; // TCP - hints.ai_family = AF_INET; // seules les adresses IPv4 seront présentées par - // la fonction getaddrinfo - - // Récupération des informations du serveur - ecode = getaddrinfo(SERVADDR, SERVPORT, &hints, &res); - if (ecode) { - fprintf(stderr,"getaddrinfo: %s\n", gai_strerror(ecode)); - exit(1); - } - // Publication de la socket - ecode = bind(descSockRDV, res->ai_addr, res->ai_addrlen); - if (ecode == -1) { - perror("Erreur liaison de la socket de RDV"); - exit(3); - } - // Nous n'avons plus besoin de cette liste chainée addrinfo - freeaddrinfo(res); - // Récuppération du nom de la machine et du numéro de port pour affichage à l'écran - - - - - - - - - - len=sizeof(struct sockaddr_storage); - ecode=getsockname(descSockRDV, (struct sockaddr *) &myinfo, &len); - if (ecode == -1) - { - perror("SERVEUR: getsockname"); - exit(4); - } - ecode = getnameinfo((struct sockaddr*)&myinfo, sizeof(myinfo), serverAddr,MAXHOSTLEN, - serverPort, MAXPORTLEN, NI_NUMERICHOST | NI_NUMERICSERV); - if (ecode != 0) { - fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(ecode)); - exit(4); - } - printf("L'adresse d'ecoute est: %s\n", serverAddr); - printf("Le port d'ecoute est: %s\n", serverPort); - - - - - - // Definition de la taille du tampon contenant les demandes de connexion - ecode = listen(descSockRDV, LISTENLEN); - if (ecode == -1) { - perror("Erreur initialisation buffer d'écoute"); - exit(5); - } - while( 1 ){ - - - - len = sizeof(struct sockaddr_storage); - // Attente connexion du client - // Lorsque demande de connexion, creation d'une socket de communication avec le client - descSockCOM = accept(descSockRDV, (struct sockaddr *) &from, &len); - if (descSockCOM == -1){ - perror("Erreur accept\n"); - exit(6); - } - // Echange de données avec le client connecté - strcpy(buffer, "BLABLABLA\n"); - - write(descSockCOM, buffer, strlen(buffer)); - //Fermeture de la connexion - close(descSockCOM); - - } - close(descSockRDV); -} - - - diff --git a/SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.c b/SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.c deleted file mode 100644 index ce414b7..0000000 --- a/SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.c +++ /dev/null @@ -1,215 +0,0 @@ -#include "proxy_ftp.h" - -// DECLARATIONS -static pthread_t userServer; -static short unsigned int userServerState = 1; -static char remoteAssignedPort[maxPortLen] = {'\0'}; - -/* headers */ -static void* testClient(char* host, char* port); -static void* testServer(); -static void* testClientFTP(); - - - - - - - - - - - -/*****************/ -/* CORPS DU PROG */ -/*****************/ -int main(int argc, char* argv[]){ - - /* client */ - if( argc > 2 && strcmp(argv[1],"c") == 0 ) - testClient("localhost", argv[2]); - - /* server */ - else if( argc > 1 && strcmp(argv[1], "s") == 0 ) - testServer(); - - /* clientFTP */ - else if( argc > 1 && strcmp(argv[1], "f") == 0 ) - testClientFTP(); - - /* client + server (multithread) */ - else if( argc > 1 && strcmp(argv[1], "both") == 0 ){ - - pthread_create(&userServer, NULL, &testServer, (void*) NULL); - - // on attends d'avoir le port - while( strlen(remoteAssignedPort) == 0 ); - - // on lance le client en boucle - while( strlen(remoteAssignedPort) != 0 ) - testClient("localhost", remoteAssignedPort); - - pthread_join(userServer, (void*) NULL); - pthread_exit((void*) userServer); - - } - - return EXIT_SUCCESS; -} - - - - - - - - - - - -static void* testClientFTP(){ - CLIENT_FTPREQUEST(FTP_HOST, FTP_PORT); - return; - - // char request[maxBuffLen]; - // char* response; - - // while( 1 ){ - // // on vide les buffers - // memset(&request, '\0', sizeof(request)); - // memset(&response, '\0', sizeof(response)); - - // printf("> "); - // read_stdin(request, maxBuffLen); - // // on supprime le dernier retour chariot - // // request[strlen(request)-1] == '\0'; - - - - // CLIENT_REQUEST(FTP_HOST, FTP_PORT, request, &response); - - // if( strlen(response) > 0 ) - // printf("%s\n", response); - - // response = NULL; - // } - - // return; -} - - -static void* testClient(char* host, char* port){ - char request[maxBuffLen]; - char* response; - - // on vide les buffers - memset(&request, '\0', sizeof(request)); - memset(&response, '\0', sizeof(response)); - - printf("> "); - read_stdin(request, maxBuffLen); - // on supprime le dernier retour chariot - // request[strlen(request)-1] == '\0'; - - - - // CLIENT_REQUEST(remoteHost, remotePort, "GET / HTTP/1.0\r\n\r\n", &response); - CLIENT_REQUEST(host, port, request, &response); - - if( strlen(response) > 0 ) - printf("%s\n", response); - - response = NULL; - - return; -} - - - - -static void* testServer(){ - int SOCKET; // contiendra la connection en cours - char BUFFER[maxBuffLen]; // contiendra le BUFFER - struct sockaddr_storage clientInfo; // contiendra les infos client - char repeat; // sert à sortir de la boucle - int nbReceived, nbSend; // contiendra les nb reçu && envoyé - socklen_t len = sizeof(struct sockaddr_storage); - - // retour de @DROP_SERVER - char* serverPort; // contiendra le port - int LISTENSOCK; // contiendra la socket d'écoute - - - /* [0] On lance @DROP_SERVER - ==========================================================*/ - DROP_SERVER(remoteHost, &serverPort, &LISTENSOCK); - - printf("Port: %s\n", serverPort); - strcpy(remoteAssignedPort, serverPort);// PORT GLOBAL - - while( userServerState ){ - - /* [1] Attente d'une demande de connection, puis création d'une socket - ============================================================================*/ - SOCKET = accept(LISTENSOCK, (struct sockaddr *) &clientInfo, &len); - - if( DEBUGMOD ) printf("SOCKET: %d\n", SOCKET); - - /* [2] On récupère les données reçues - ============================================================================*/ - nbReceived = read(SOCKET, BUFFER, sizeof(BUFFER)-1); - - if( DEBUGMOD ) printf("Recu: %d\n", nbReceived); - if( DEBUGMOD ) printf("Message: %s\n", BUFFER); - - /* [3] Redirection vers le serveur FTP - ============================================================================*/ - // on redirige la réponse vers le serveur FTP distant - char* ftp_response; - CLIENT_REQUEST(FTP_HOST, FTP_PORT, BUFFER, &ftp_response); - // printf("===FTP===\n%s\n", ftp_response); - - /* [4] On analyse et renvoie la réponse à l'utilisateur - ============================================================================*/ - // formatBuffer(ftp_response); - // MANAGE_RESPONSE(&SOCKET, ftp_response); - - // on réponds au client - formatBuffer(ftp_response); - write(SOCKET, ftp_response, strlen(ftp_response)-1); - - - /* [5] On ferme la SOCKET et vide les buffers - ============================================================================*/ - close(SOCKET); - memset(&BUFFER, '\0', sizeof(BUFFER)); // on vide le buffer - ftp_response = NULL; - - - } - - close(LISTENSOCK); - strcpy(remoteAssignedPort, "\0"); -} - - -/* -* DROP_SERVER -* INIT_CLIENT -* -* while(){ -* accept(); -* send -* } -* -* EXIT_CLIENT -* HALT_SERVER -* -* -* -* -* -* -* -* -*/ \ No newline at end of file diff --git a/SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.h b/SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.h deleted file mode 100644 index 0ff6983..0000000 --- a/SEQUENTIAL/thread/SEQUENTIAL/proxy_ftp.h +++ /dev/null @@ -1,39 +0,0 @@ -/* global */ -#include -#include -#include -#include - -/* sys */ -#include -#include - -/* socket */ -#include -#include // getaddrinfo, getnameinfo -#include - -/* basis */ -#define TRUE 1 -#define FALSE 0 - - -/* debug */ -// #define DEBUGMOD FALSE // TRUE = débugmode activé -#define DEBUGMOD TRUE // TRUE = débugmode activé - -/* vars */ -#define remoteHost "localhost" -#define remotePort "80" -#define maxBuffLen 4096 -#define maxListLen 2 -#define maxHostLen 64 -#define maxPortLen 6 - -#define FTP_HOST "31.170.164.47" -#define FTP_PORT "21" - -/* local dependencies */ -#include "dep/utility.c" -#include "dep/client.c" -#include "dep/server.c" diff --git a/SEQUENTIAL/thread/SEQUENTIAL/test b/SEQUENTIAL/thread/SEQUENTIAL/test deleted file mode 100755 index 798442f9ab5aa6c00ac2f83845a0b5036fa68373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18741 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 diff --git a/SEQUENTIAL/thread/backup/client.c b/SEQUENTIAL/thread/backup/client.c deleted file mode 100644 index efd0a9f..0000000 --- a/SEQUENTIAL/thread/backup/client.c +++ /dev/null @@ -1,64 +0,0 @@ -#include -#include -#include -#include -#include -#include -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 -#define MAXBUFFERLEN 1024 -int main(int argc, char* argv[]){ - int descSock; // Descripteur de la socket - int ecode; // Retour des fonctions - struct addrinfo *res; // Résultat de la focntion getaddrinfo - struct addrinfo hints = { // Cette structure permet de contrôler l'exécution de la fonction getaddrinfo - 0, - AF_INET, //seule les adresses IPv4 seront présentées par la fonctiongetaddrinfo - SOCK_STREAM, - 0, - 0, - NULL, - NULL, - NULL - }; - char serverName[MAXHOSTLEN]; // Nom de la machine serveur - char serverPort[MAXPORTLEN]; // Numéro de port - char buffer[MAXBUFFERLEN]; // buffer stockant les messages échangés entre le client et le serveur - //On teste les valeurs rentrées par l'utilisateur - if (argc != 3){ perror("Mauvaise utilisation de la commande: \n"); exit(1);} - if (strlen(argv[1]) >= MAXHOSTLEN){ perror("Le nom de la machine serveur est trop long\n"); exit(2);} - if (strlen(argv[2]) >= MAXPORTLEN){ perror("Le numero de port du serveur est trop long\n"); exit(2);} - strncpy(serverName, argv[1], MAXHOSTLEN); - serverName[MAXHOSTLEN-1] = '\0'; - strncpy(serverPort, argv[2], MAXPORTLEN); - serverPort[MAXPORTLEN-1] = '\0'; - //Création de la socket IPv4/TCP - descSock = socket(AF_INET, SOCK_STREAM, 0); - if (descSock == -1) { - perror("Erreur creation socket"); - exit(4); - } - //Récupération des informations sur le serveur - ecode = getaddrinfo(serverName,serverPort,&hints,&res); - if (ecode){ - fprintf(stderr,"getaddrinfo: %s\n", gai_strerror(ecode)); - exit(3); - } - //Connexion au serveur - ecode = connect(descSock, res->ai_addr, res->ai_addrlen); - if (ecode == -1) { - close(descSock); - freeaddrinfo(res); - perror("Erreur connect"); - exit(5); - } - freeaddrinfo(res); - //Echange de donneés avec le serveur - ecode = read(descSock, buffer, MAXBUFFERLEN); - if (ecode == -1) {perror("Problème de lecture\n"); exit(6);} - buffer[ecode] = '\0'; - printf("MESSAGE RECU DU SERVEUR: \"%s\".\n",buffer); - //Fermeture de la socket - close(descSock); -} - diff --git a/SEQUENTIAL/thread/backup/proxy_aure.c b/SEQUENTIAL/thread/backup/proxy_aure.c deleted file mode 100644 index 999e131..0000000 --- a/SEQUENTIAL/thread/backup/proxy_aure.c +++ /dev/null @@ -1,336 +0,0 @@ -// Bibliothéques -// ============================================== - -#include -#include -#include -#include -#include - - -// Constantes -// ============================================== - -#define SERVADDR "127.0.0.1" // Définition de l'adresse IP d'écoute -#define SERVPORT "4444" // Définition du port d'écoute, si 0 port choisi dynamiquement -#define LISTENLEN 2 // Taille du tampon de demandes de connexions, MAX 2 -#define MAXBUFFERLEN 1024 -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 - - -// PROCEDURES -// ============================================== - -void decoupeLogin( char *entreeUtilisateur, char *login, char *server ); -void waitingForUser(int *socket,char *buffer,int *n); -void waitingForServer(int *socket,char *buffer,int *n); - - -// MAIN -// ============================================== - -int main( int argc, char *argv[] ) { - - // Variables [ SERVEUR ] >> [ PROXY ] - [ PROXY ] >> [ SERVEUR ] - // ============================================== - - int sockServeur; // Descripteur pour le socket - int fncRet; // Stock le retour des fonctions - struct addrinfo *resBIS; // Résultat de la focntion getaddrinfo - struct addrinfo hintsBIS = {0, AF_INET, SOCK_STREAM, 0, 0, NULL, NULL, NULL}; // Filtra pour le getaddrinfo - char bufferFTP[MAXBUFFERLEN]; - - // Variables [ CLIENT ] >> [ PROXY ] - [ PROXY ] >> [ CLIENT ] - // ============================================== - - char serverAddr[MAXHOSTLEN]; // Adresse du serveur - char serverPort[MAXPORTLEN]; // Port du server - char buffer[MAXBUFFERLEN]; // Tampon pour écrire sur le socket - char bufferRcv[MAXBUFFERLEN]; // Tampon pour écrire sur le socket - int descSockRDV; // Descripteur de socket de rendez-vous - int ecode; // Code retour des fonctions - int descSockCOM; // Descripteur de socket de communication - int n = 0; - int lenRCV = 0; - - - struct addrinfo hints; // Filtre pour la fonction get_addr_info - struct addrinfo *res; // Resultat get_addr_info - struct sockaddr_storage myinfo; // Informations sur la connexion de RDV - struct sockaddr_storage from; // Informations sur le client connecté - - - char entreeUtilisateur[40]; // login@server - char login[20]; // Isoler le login - char serveur[20]; // Isoler le serveur - - - socklen_t len = sizeof( struct sockaddr_storage ); // Variable utilisée pour stocker les longueurs des structures de socket - - pid_t pid; - - // Initialisation de la socket de RDV IPv4/TCP - - descSockRDV = socket( AF_INET, SOCK_STREAM, 0 ); - - // Mise à zéro de la variable hints,entreeUtilisateur,loggin.. - - memset( &hints, 0, sizeof( hints ) ); - memset( entreeUtilisateur, 0, sizeof( entreeUtilisateur ) ); - memset( login, 0, sizeof( login ) ); - memset( serveur, 0, sizeof( serveur ) ); - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - // Initailisation de la variable hints - - hints.ai_flags = AI_PASSIVE; // mode serveur, nous allons utiliser la fonction bind - hints.ai_socktype = SOCK_STREAM; // TCP - hints.ai_family = AF_INET; // IPv4 - - // Récupération des informations du serveur > Machine locale - - ecode = getaddrinfo( SERVADDR, SERVPORT, &hints, &res ); - - // Publication de la socket - - ecode = bind( descSockRDV, res->ai_addr, res->ai_addrlen ); - - ecode = listen( descSockRDV, LISTENLEN ); - - // Attente connexion du client - // Lorsque demande de connexion, creation d'un processus fils et d'un socket de communication avec le client, MAX 2 attentes - - while( 1 == 1 ) { - - descSockCOM = accept( descSockRDV, ( struct sockaddr * ) &from, &len ); - - if( ( pid= fork() ) == 0) { - - close( descSockRDV ); // On ferme le socketRDV on s'occupe seulement de gérer le socket actuel - - strcpy( buffer, "220 Bienvenue sur le proxyFTP de aurehacks\r\n" ); // Echange de données avec le client connecté - - send( descSockCOM, buffer, strlen( buffer ), 0 ); // Ecriture sur le socket - - while(1 == 1) { // Gestion des commandes - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // Gestion de l'authentification - // ============================================== - - if( strstr( bufferRcv,"USER") ) { - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - - decoupeLogin(bufferRcv,login,serveur); // On isole le loggin ainsi que l'IP/URL du serveur - - strcat(buffer,login); // On formate le login - - sockServeur = socket(AF_INET, SOCK_STREAM, 0); - - getaddrinfo(serveur,"21",&hints,&res); - - connect(sockServeur, res->ai_addr, res->ai_addrlen); - - - - // [1] Message de Bienvenue - // ============================================== - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - - // [2] Envoi de "USER login" - // ============================================== - - send( sockServeur, buffer, strlen( buffer ), 0 ); - send( sockServeur, "\r\n", 2, 0 ); - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - // [3] Réception du "331 password required" et transmission au client - // ============================================== - - strcpy( bufferFTP, "331 required password\r\n" ); // Cas special SINON ON EN DIRECT send( descSockCOM, strcat(bufferFTP,"\r\n"), strlen( bufferFTP ), 0 ); - - send( descSockCOM, bufferFTP, strlen( bufferFTP ), 0 ); - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // ============================================== - - - - // [4] Réception du "PASS mdp" (mot de passe du client) et transmission au serveur - // ============================================== - - send( sockServeur, bufferRcv, strlen( bufferRcv ), 0 ); - send( sockServeur, "\r\n", 2, 0 ); - - waitingForServer(&sockServeur,bufferFTP,&n); - - // ============================================== - - - - - // [5] Réception du "220 logged in" et transmission au client - // ============================================== - - strcpy( bufferFTP, "220 Logged IN !\r\n" ); // Cas special SINON ON EN DIRECT send( descSockCOM, strcat(bufferFTP,"\r\n"), strlen( bufferFTP ), 0 ); - - send( descSockCOM, bufferFTP, strlen( bufferFTP ), 0 ); - - waitingForUser(&descSockCOM,bufferRcv,&n); - - // ============================================== - - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - - // Gestion du mode actif - // ============================================== - - if( strncmp( bufferRcv,"PORT", 4 ) ) { - - n = 0; - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - // Gestion du mode passif - // ============================================== - - if( strncmp( bufferRcv,"PASSV", 5 ) ) { - - n = 0; - - // On clean les buffers - - memset( buffer, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferRcv, 0, sizeof( MAXBUFFERLEN ) ); - memset( bufferFTP, 0, sizeof( MAXBUFFERLEN ) ); - - - } - - // Gestion de la fermeture de session - // ============================================== - - - if( strncmp( bufferRcv,"QUIT", 4 ) ) { - - break; // On quitte la boucle lorsque que l'on reçoit la commande "QUIT" - } - - } - - freeaddrinfo(res); - - close( descSockCOM ); - close( sockServeur ); - - // Fin du fils - - exit(0); - } - } - - close( descSockRDV ); - - return 0; -} - -// decoupeLogin -// ============================================== - -void decoupeLogin( char *entreeUtilisateur, char *login, char *server ) { - - int i,j = 0; - - for( i=0; i -#include -#include -#include -#include -#define SERVADDR "127.0.0.1" // Définition de l'adresse IP d'écoute -#define SERVPORT "0" // Définition du port d'écoute, si 0 port choisi dynamiquement -#define LISTENLEN 1 // Taille du tampon de demande de connexion -#define MAXBUFFERLEN 1024 -#define MAXHOSTLEN 64 -#define MAXPORTLEN 6 - - -int main(){ - int ecode; // Code retour des fonctions - char serverAddr[MAXHOSTLEN]; // Adresse du serveur - char serverPort[MAXPORTLEN]; // Port du server - int descSockRDV; // Descripteur de socket de rendez-vous - int descSockCOM; // Descripteur de socket de communication - struct addrinfo hints; // Contrôle la fonction getaddrinfo - struct addrinfo *res; // Contient le résultat de la fonction getaddrinfo - struct sockaddr_storage myinfo; // Informations sur la connexion de RDV - struct sockaddr_storage from; // Informations sur le client connecté - socklen_t len; // Variable utilisée pour stocker les - // longueurs des structures de socket - char buffer[MAXBUFFERLEN]; // Tampon de communication entre le client et le serveur - // Initialisation de la socket de RDV IPv4/TCP - descSockRDV = socket(AF_INET, SOCK_STREAM, 0); - if (descSockRDV == -1) { - perror("Erreur création socket RDV\n"); - exit(2); - } - // Publication de la socket au niveau du système - // Assignation d'une adresse IP et un numéro de port - // Mise à zéro de hints - memset(&hints, 0, sizeof(hints)); - // Initailisation de hints - hints.ai_flags = AI_PASSIVE; // mode serveur, nous allons utiliser la fonction bind - hints.ai_socktype = SOCK_STREAM; // TCP - hints.ai_family = AF_INET; // seules les adresses IPv4 seront présentées par - // la fonction getaddrinfo - - // Récupération des informations du serveur - ecode = getaddrinfo(SERVADDR, SERVPORT, &hints, &res); - if (ecode) { - fprintf(stderr,"getaddrinfo: %s\n", gai_strerror(ecode)); - exit(1); - } - // Publication de la socket - ecode = bind(descSockRDV, res->ai_addr, res->ai_addrlen); - if (ecode == -1) { - perror("Erreur liaison de la socket de RDV"); - exit(3); - } - // Nous n'avons plus besoin de cette liste chainée addrinfo - freeaddrinfo(res); - // Récuppération du nom de la machine et du numéro de port pour affichage à l'écran - - - - - - - - - - len=sizeof(struct sockaddr_storage); - ecode=getsockname(descSockRDV, (struct sockaddr *) &myinfo, &len); - if (ecode == -1) - { - perror("SERVEUR: getsockname"); - exit(4); - } - ecode = getnameinfo((struct sockaddr*)&myinfo, sizeof(myinfo), serverAddr,MAXHOSTLEN, - serverPort, MAXPORTLEN, NI_NUMERICHOST | NI_NUMERICSERV); - if (ecode != 0) { - fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(ecode)); - exit(4); - } - printf("L'adresse d'ecoute est: %s\n", serverAddr); - printf("Le port d'ecoute est: %s\n", serverPort); - - - - - - // Definition de la taille du tampon contenant les demandes de connexion - ecode = listen(descSockRDV, LISTENLEN); - if (ecode == -1) { - perror("Erreur initialisation buffer d'écoute"); - exit(5); - } - while( 1 ){ - - - - len = sizeof(struct sockaddr_storage); - // Attente connexion du client - // Lorsque demande de connexion, creation d'une socket de communication avec le client - descSockCOM = accept(descSockRDV, (struct sockaddr *) &from, &len); - if (descSockCOM == -1){ - perror("Erreur accept\n"); - exit(6); - } - // Echange de données avec le client connecté - strcpy(buffer, "BLABLABLA\n"); - - write(descSockCOM, buffer, strlen(buffer)); - //Fermeture de la connexion - close(descSockCOM); - - } - close(descSockRDV); -} - - - diff --git a/SEQUENTIAL/thread/main.c b/SEQUENTIAL/thread/main.c deleted file mode 100644 index 989d7b7..0000000 --- a/SEQUENTIAL/thread/main.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include -#include - -static void* action1(); -static void* action2(); - - -pthread_t thread1, thread2; -static int bool1 = 1; -static int bool2 = 1; - - - -int main(int argc, char* argv []){ - - pthread_create(&thread1, NULL, &action1, (void*) NULL); - pthread_create(&thread2, NULL, &action2, (void*) NULL); - - printf("THREADS CREATED\n===============\n"); - - sleep(3); - bool1 = 0; - sleep(3); - bool2 = 0; - - - - - return EXIT_SUCCESS; -} - - - - - - -static void* action1(){ - while( bool1 ){ - printf("[THREAD] 1\n"); - sleep(1); - } - - pthread_exit((void*) thread1); -} - -static void* action2(){ - while( bool2 ){ - printf("[THREAD] 2\n"); - sleep(1); - } - - pthread_exit((void*) thread2); -} \ No newline at end of file diff --git a/SEQUENTIAL/thread/proxy_ftp.c b/SEQUENTIAL/thread/proxy_ftp.c deleted file mode 100644 index ce414b7..0000000 --- a/SEQUENTIAL/thread/proxy_ftp.c +++ /dev/null @@ -1,215 +0,0 @@ -#include "proxy_ftp.h" - -// DECLARATIONS -static pthread_t userServer; -static short unsigned int userServerState = 1; -static char remoteAssignedPort[maxPortLen] = {'\0'}; - -/* headers */ -static void* testClient(char* host, char* port); -static void* testServer(); -static void* testClientFTP(); - - - - - - - - - - - -/*****************/ -/* CORPS DU PROG */ -/*****************/ -int main(int argc, char* argv[]){ - - /* client */ - if( argc > 2 && strcmp(argv[1],"c") == 0 ) - testClient("localhost", argv[2]); - - /* server */ - else if( argc > 1 && strcmp(argv[1], "s") == 0 ) - testServer(); - - /* clientFTP */ - else if( argc > 1 && strcmp(argv[1], "f") == 0 ) - testClientFTP(); - - /* client + server (multithread) */ - else if( argc > 1 && strcmp(argv[1], "both") == 0 ){ - - pthread_create(&userServer, NULL, &testServer, (void*) NULL); - - // on attends d'avoir le port - while( strlen(remoteAssignedPort) == 0 ); - - // on lance le client en boucle - while( strlen(remoteAssignedPort) != 0 ) - testClient("localhost", remoteAssignedPort); - - pthread_join(userServer, (void*) NULL); - pthread_exit((void*) userServer); - - } - - return EXIT_SUCCESS; -} - - - - - - - - - - - -static void* testClientFTP(){ - CLIENT_FTPREQUEST(FTP_HOST, FTP_PORT); - return; - - // char request[maxBuffLen]; - // char* response; - - // while( 1 ){ - // // on vide les buffers - // memset(&request, '\0', sizeof(request)); - // memset(&response, '\0', sizeof(response)); - - // printf("> "); - // read_stdin(request, maxBuffLen); - // // on supprime le dernier retour chariot - // // request[strlen(request)-1] == '\0'; - - - - // CLIENT_REQUEST(FTP_HOST, FTP_PORT, request, &response); - - // if( strlen(response) > 0 ) - // printf("%s\n", response); - - // response = NULL; - // } - - // return; -} - - -static void* testClient(char* host, char* port){ - char request[maxBuffLen]; - char* response; - - // on vide les buffers - memset(&request, '\0', sizeof(request)); - memset(&response, '\0', sizeof(response)); - - printf("> "); - read_stdin(request, maxBuffLen); - // on supprime le dernier retour chariot - // request[strlen(request)-1] == '\0'; - - - - // CLIENT_REQUEST(remoteHost, remotePort, "GET / HTTP/1.0\r\n\r\n", &response); - CLIENT_REQUEST(host, port, request, &response); - - if( strlen(response) > 0 ) - printf("%s\n", response); - - response = NULL; - - return; -} - - - - -static void* testServer(){ - int SOCKET; // contiendra la connection en cours - char BUFFER[maxBuffLen]; // contiendra le BUFFER - struct sockaddr_storage clientInfo; // contiendra les infos client - char repeat; // sert à sortir de la boucle - int nbReceived, nbSend; // contiendra les nb reçu && envoyé - socklen_t len = sizeof(struct sockaddr_storage); - - // retour de @DROP_SERVER - char* serverPort; // contiendra le port - int LISTENSOCK; // contiendra la socket d'écoute - - - /* [0] On lance @DROP_SERVER - ==========================================================*/ - DROP_SERVER(remoteHost, &serverPort, &LISTENSOCK); - - printf("Port: %s\n", serverPort); - strcpy(remoteAssignedPort, serverPort);// PORT GLOBAL - - while( userServerState ){ - - /* [1] Attente d'une demande de connection, puis création d'une socket - ============================================================================*/ - SOCKET = accept(LISTENSOCK, (struct sockaddr *) &clientInfo, &len); - - if( DEBUGMOD ) printf("SOCKET: %d\n", SOCKET); - - /* [2] On récupère les données reçues - ============================================================================*/ - nbReceived = read(SOCKET, BUFFER, sizeof(BUFFER)-1); - - if( DEBUGMOD ) printf("Recu: %d\n", nbReceived); - if( DEBUGMOD ) printf("Message: %s\n", BUFFER); - - /* [3] Redirection vers le serveur FTP - ============================================================================*/ - // on redirige la réponse vers le serveur FTP distant - char* ftp_response; - CLIENT_REQUEST(FTP_HOST, FTP_PORT, BUFFER, &ftp_response); - // printf("===FTP===\n%s\n", ftp_response); - - /* [4] On analyse et renvoie la réponse à l'utilisateur - ============================================================================*/ - // formatBuffer(ftp_response); - // MANAGE_RESPONSE(&SOCKET, ftp_response); - - // on réponds au client - formatBuffer(ftp_response); - write(SOCKET, ftp_response, strlen(ftp_response)-1); - - - /* [5] On ferme la SOCKET et vide les buffers - ============================================================================*/ - close(SOCKET); - memset(&BUFFER, '\0', sizeof(BUFFER)); // on vide le buffer - ftp_response = NULL; - - - } - - close(LISTENSOCK); - strcpy(remoteAssignedPort, "\0"); -} - - -/* -* DROP_SERVER -* INIT_CLIENT -* -* while(){ -* accept(); -* send -* } -* -* EXIT_CLIENT -* HALT_SERVER -* -* -* -* -* -* -* -* -*/ \ No newline at end of file diff --git a/SEQUENTIAL/thread/proxy_ftp.h b/SEQUENTIAL/thread/proxy_ftp.h deleted file mode 100644 index 0ff6983..0000000 --- a/SEQUENTIAL/thread/proxy_ftp.h +++ /dev/null @@ -1,39 +0,0 @@ -/* global */ -#include -#include -#include -#include - -/* sys */ -#include -#include - -/* socket */ -#include -#include // getaddrinfo, getnameinfo -#include - -/* basis */ -#define TRUE 1 -#define FALSE 0 - - -/* debug */ -// #define DEBUGMOD FALSE // TRUE = débugmode activé -#define DEBUGMOD TRUE // TRUE = débugmode activé - -/* vars */ -#define remoteHost "localhost" -#define remotePort "80" -#define maxBuffLen 4096 -#define maxListLen 2 -#define maxHostLen 64 -#define maxPortLen 6 - -#define FTP_HOST "31.170.164.47" -#define FTP_PORT "21" - -/* local dependencies */ -#include "dep/utility.c" -#include "dep/client.c" -#include "dep/server.c" diff --git a/SEQUENTIAL/thread/test b/SEQUENTIAL/thread/test deleted file mode 100755 index 798442f9ab5aa6c00ac2f83845a0b5036fa68373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18741 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 diff --git a/SEQUENTIAL/thread/thread/main.c b/SEQUENTIAL/thread/thread/main.c deleted file mode 100644 index 989d7b7..0000000 --- a/SEQUENTIAL/thread/thread/main.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include -#include - -static void* action1(); -static void* action2(); - - -pthread_t thread1, thread2; -static int bool1 = 1; -static int bool2 = 1; - - - -int main(int argc, char* argv []){ - - pthread_create(&thread1, NULL, &action1, (void*) NULL); - pthread_create(&thread2, NULL, &action2, (void*) NULL); - - printf("THREADS CREATED\n===============\n"); - - sleep(3); - bool1 = 0; - sleep(3); - bool2 = 0; - - - - - return EXIT_SUCCESS; -} - - - - - - -static void* action1(){ - while( bool1 ){ - printf("[THREAD] 1\n"); - sleep(1); - } - - pthread_exit((void*) thread1); -} - -static void* action2(){ - while( bool2 ){ - printf("[THREAD] 2\n"); - sleep(1); - } - - pthread_exit((void*) thread2); -} \ No newline at end of file diff --git a/SEQUENTIAL/thread/thread/test b/SEQUENTIAL/thread/thread/test deleted file mode 100755 index c7942b766b1ad43e859aaa6d08ba969c9cd9d39e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8915 zcmeHMeQaCR6~DHd#4XfuSs5v1)M6kNq?jgzVnBuGe6%l+l&*Dw4Z^b%yN#J+NA@$M zOt5Zg(X3Kdv1tROvHrm}_JM>Z4Q2eXw(CZPwm%BfHYCQBp@9;hQYH!u2=IRAzH{v7 z7iUA0_Sd+U@44r9KJLf6_uTjH{p!HbR=>}uB>B}1inxUqLqkrk)XW;qG8R)Sm7y+H z>s2d|7W@q@A?lQbF0yN(LDma^uE0O$cYv7R&;_9vIj|BcEhI|y)sw+RhhDVGVTCFc z(E!;|TUAK2ph>5|G|BClVk&mTl3fSeb+EqBS#Fq6=^yot{t5P%@EhQWH;AZyo!2Sp zQrhvlou=|pc62mo5Dea-%h`PacDjFB`#)!4R@uq*EjKPo#)Bz$S6!LQj&AO`GMDbm zW%K2!&Z*eu&doj1QX$%{`%V5yciZ;ex~AGVf}{Se#h>N?$rrZ0a{S@TPygbPpFQ5& zx$VsGb%BSzPqy+$@e`+UXr9+Zo2GB13H~);&Ga8y27dy01b=V313)uBoxmerW$^K3 z@CSi6^P@1{llFKqlS>Ns7WCy( zrBbHk=r`47w^n8>W+3tucofkvk&N}?Mxzi?mqnP1*Lfs!M}WAb|q;&jWQ*Y`#@!$I&yza zzSy25wOahq46=@JQWx8hlf9&f3#a-eZFJ$X21&Nbg}dWT%!Rwxo8iLIkyyUordh&jC&GApm&>mNBe1An?hXGe~as5;xe zVLxFr#EJfi#Q^lp%CF56Z{BG7PMa?-mSOxHDVhggvd@l~mFFG%*VumlmKRn=Fdf$H zhUMG?XvoO(Ezbh-y>pVr$DH1Bdm9w&i)&3-yZcxeQ5pKx()X{eigIi&nTLeQ*+lq zz;@pvyMKPvV7F1*JyEy&5!+Rvw7X==`*i=tNbQS z;5$a*cg9EJcg3xfd+L?GgL$pzJWp{SZy*VC=RmxFSELUlG0?wiOJh=ZI0_??u6nT> z-SDjsT#sp}Xg$wAruC5IAVB*KCEtBJ zm2WESTYqj_@QAN1OgOz`%)$2+q`;}UzEYP$PWmSFCrLLH-Wuw-sr{ULgZtHu7hZqG zRhM2uFzHac??+qp^1neI163lYG7{O7-TTYP$@i1^N6_aC zsOk-czv&+cbvzsx2t^LB7zk~AsKpFzda%_D#irYaLq;wXi-$JFLmPWTk={@T^m{`= zy$`<)a}$1?=uFN&O`ndyrz7zHFapoC8oHZDm`a~HY}VePgr|2lO6NL6C0h(#TFra{ z`xT{iI!A_`nbLZlD}~Uf(}lvboZ=lNk-z(KwLtu%euGHuoA0TB!^^wZjNjo`L5Gsw z%0bW39Nq_+p3hVWZRa{+tEVKfkM%;m)aez5E(t!vytG^DTgm#uBfRSV zOtC(;Ce2H|3(SwQoX!8|M80Fa6@7=F>kpYe%k+7se`5LuQ?EVE7y57O>$@(parbCB zZEyR?%!8A52j@GlhH)7|06gl$}!1%(%6un3~8~<7wCm=U7;&VllPPv5@lJ zV^D+l)I@d+RTtn8Syb2JcpNR2RCKH`F_FpJ-m(5~cv_G2d}RK`{06xCd5o+_4I(35 zcltb-HvGjt;Wxn5&pRTTt7j|fMP2Gb?zXr6hQ@7nc&X;}B6ea7QKni#`vFu<9t=OEpQ}HG*8i->eva#(WBVS@g7?;c9QJf1TH8l?AD44PufCW6J#5=u_CdA} z@;R$l-^;%YTWX@zPbUDB!k^IoRp`>(6MNYQ<(zkx`!DlT>X-TR25jB+%X!oybqY!J z9j?v`{uTsod&Tb|a^Pi(Aycsvde&oavc1U-lyxd@#7_7RP#{eDPscWtlAqAN3SDad zCNgp*u^)C}ROI2TQ96&6y4|WzbNxXvV4;WAeq`;q?PL7nxxf$Za}d&ABmI|gq4n9U z{*4g`kbdfM?ycX^YMuwsx|rWsA`BqfCYs^_WjDoF)ZTyH&H{KFo@uJzs$?H()NfO= zzck`OCHqDrzEa74(1@?9z5h1i=hWhNBYv)uxZH@ZuH7#+;vpq*v=MJt5+57!aP3~C z5nrPuo;Bh)S(iBF5(Ly|l*AtwjQOz^@g(VnbUC2T$9+&U{Ig2pfZHfQUk|drU4j6< zPGsG>VAQ(~>#&)B@2=>qs}<@Wv>Y1}?YX`t?Wg78SF2T|)o9RhWtrZpfn#`+qJ+Mp1 z=Mt^IbY8`PpND?YsXiqMW2VM6)R3itM;Z`^*{|`X^YhR$e!d4hjQQ-Hw@+&QrR(}9 zz}H~@&>1`>iO)Y@#{Y}#-@9J^3Ou4cG-hXjukm-N9qeDE9}tc=4~Zu-e^z3kXxwIb zK4jQnoyNtwPOkzUM*F8c{^>rO{K)&HSlr0^-toDa_37S)(gB_0j2n1_%WjeePUA*b z6qID#a)hJ5UjKBT9nqSN*(1O)tCpl6XuL^0A1m4=yNr|mG2Hgu)VI?b8r+qzELFdP zwCo9Mj4mNdO70n5kY%L{*4|uUG?lZ`cA;3ZQspUyFWSjm#?GXpo3Fj*DtK<9WYM>^ z^QCOz>$kX1Ip5al^2EeGn7BBLKFJ$Y>3R}P9xW7dT{`bpsWBU0_+3o9;bH5}`0#)= zu)QDsaXKgE27hT~^?z}De0Z=AS}uvc2vyd$p<8<6L)I-@x9%E9Sc!P=&;Ys9cco*c zvhIfGe$_DCSEc{%N|#OnocmRM6YDX|=tBah2IrEvOKPs)(t2zxmrKw6EgnOuV2!8p zX}U}vyag4fvw5pr%3uiU9ikzqb%<_{JvC(VQ0Kw1aDc&O=f=3n6}8iHdLX#Xmd8QY S+%laSF1htxw5LYhqJII3W+HU} diff --git a/dep/server.c b/dep/server.c index 3ed1d8a..de3187f 100644 --- a/dep/server.c +++ b/dep/server.c @@ -166,8 +166,8 @@ void MANAGE_REQUEST(char* pRequest, int* DUSER_SOCKET, int* DFTP_SOCKET){ // on se connecte au client + printf("CONNECTING TO CLIENT %s:%s\n", serverHost, serverPort); CONNECT_CLIENT(serverHost, serverPort, DUSER_SOCKET); - printf("CONNECTED TO CLIENT %s:%s\n", serverHost, serverPort); // on envoie PASV car on veut être en mode passif entre le proxy et le serveur FTP @@ -239,14 +239,12 @@ void MANAGE_RESPONSE(char** pAnswer, int* DUSER_SOCKET, int* DFTP_SOCKET){ /* (7) Mode passif => On lance les SOCKETS du BUS DE DONNEES --------------------------------------------*/ else if( strcmp(ftpCode, "227") == 0 ){ // on lance la SOCKET FTP du BUS DE DONNEES - strcpy(response, *pAnswer); + strcpy(response, "200 Tout s'est bien passé.\n"); int a1, a2, a3, a4 = 0; int p1, p2 = 0; char serverHost[maxHostLen]; char serverPort[maxPortLen]; - char BUFFER[maxBuffLen]; - sscanf(*pAnswer, "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)", &a1, &a2, &a3, &a4, &p1, &p2); // on récupère l'adresse en sprintf(serverHost, "%d.%d.%d.%d", a1, a2, a3, a4); @@ -254,13 +252,31 @@ void MANAGE_RESPONSE(char** pAnswer, int* DUSER_SOCKET, int* DFTP_SOCKET){ sprintf(serverPort, "%d", p1*256+p2); // on se connecte au serveur FTP + printf("CONNECTING TO FTP %s:%s\n", serverHost, serverPort); CONNECT_CLIENT(serverHost, serverPort, DFTP_SOCKET); - printf("CONNECTED TO FTP %s:%s\n", serverHost, serverPort); } - /* (8) Fin de transfert de données + /* (8) On lit la SOCKET FTP du BUS DE DONNEES + --------------------------------------------*/ + else if( strcmp(ftpCode, "150") == 0 ){ // on lit la SOCKET FTP du BUS DE DONNEES + + char BUFFER[maxBuffLen]; + + // on lit la SOCKET FTP + if( sread(DFTP_SOCKET, BUFFER) == -1 ) printf("ERROR\n"); + else xPrint("[BUS_IN]: %s\n", BUFFER); + + // on redirige sur la SOCKET utilisateur + if( swrite(DUSER_SOCKET, BUFFER) == -1 ) printf("ERROR\n"); + else xPrint("[BUS_OUT]: %s\n", BUFFER); + + + } + + + /* (9) Fin de transfert de données --------------------------------------------*/ else if( strcmp(ftpCode, "226") == 0 ){ // on ferme les SOCKETS du BUS DE DONNEES strcpy(response, *pAnswer); diff --git a/proxy_ftp.h b/proxy_ftp.h index 5b059e3..2cf1ab0 100644 --- a/proxy_ftp.h +++ b/proxy_ftp.h @@ -30,8 +30,8 @@ #define maxHostLen 64 #define maxPortLen 6 -#define FTP_HOST "31.170.164.47" -// #define FTP_HOST "localhost" +// #define FTP_HOST "31.170.164.47" +#define FTP_HOST "localhost" #define FTP_PORT "21" // u712664263 diff --git a/test b/test index e6cfa267b1dfd45a05ecafae436e6f75fd6130b7..ee51713707aa497a025352f50a241c0a307e0678 100755 GIT binary patch delta 5147 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 delta 4454 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