begin process at 2012 05 28 23:33:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Réseau & Internet

 > 

creation d'un proxy


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

creation d'un proxy

mardi 19 décembre 2006 à 12:07:19 | creation d'un proxy

krusty24

je doit creer un proxy :
    de notre coté on se connecte actif
    le serveur fonctionne en passif

j'ai essayer de faire un proxy en C et je me trouve en difficulté
je ne c'est pas comment tester se programme.

le code suivant et la partie commande
je n'est pas encore fait la partie données

je remercie d'avance toute personne tetant de m'aider




#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <string.h>
 
int main (int nbpar, char ** tab)
{
    int  err, fd_sock, nouvSock, nom, lect, port;
    struct in_addr addr;
    struct sockaddr_in adrSock1, adrSock2;
    char nomMachine[50] ,tampon[256];
    struct hostent * caract;
    long IP1, IP;
     
     
    //connection du client au proxy
     
    //creation d'un socket
    fd_sock=socket(AF_INET,SOCK_STREAM,0);
    if (fd_sock==-1)
    {
        perror("socket!");
        exit(1);
    }
     
    //recuperation du nom de la machine
    nom=gethostname(nomMachine, sizeof(nomMachine));
    if (nom==-1)
    {
        perror("erreur gethostname");
        exit(2);
    }
     
    //recuperation de l'adresse IP
    caract=(gethostbyname(nomMachine));
    if (caract==NULL)
    {
        perror("erreur gethostbyname");
        exit(3);
    }
    IP1=ntohl(*((long*)caract ->h_addr));
 
 
    //initialisation du nom externe d'une prise socket
    adrSock1.sin_family = AF_INET;
    adrSock1.sin_port=0;
    adrSock1.sin_addr.s_addr=ntohl(IP1);
     
    //publication d'une socket
    err=bind(fd_sock,(struct sockaddr *) &adrSock1,sizeof(adrSock1));
    if(err==-1)
    {
        perror("publication du socket impossible");
        exit(4);
    }
 
    //attente d'acceptation de la connexion
    err=listen(fd_sock, 1);
    if(err==-1)
    {
        perror("attente impossible");
        exit(5);
    }
     
     
    //initialisation de la structure sockaddr_in
    int lg=sizeof(adrSock1);
    err=getsockname(fd_sock,(struct sockaddr *) &adrSock1, &lg);
    if(err==-1)
    {
        perror("erreur getsockname");
        exit(6);
    }
     
     
    //Récupérer le port
    port=ntohs(adrSock1.sin_port);     
     
     
    lg=sizeof(adrSock1);
    nouvSock=accept(fd_sock,(struct sockaddr *) & adrSock1, &lg);
    if (nouvSock==-1)
    {
        perror("impossible d'accpter la connection");
        exit(7);
    }
     
    //lecture de information
    lect=read(nouvSock,tampon,sizeof(tampon));
    if (lect == -1)
    {
        perror("echec lire");
        exit (8);
    }
    while(lect != 0 && tampon[0]!='U')
    {
        lect=read(nouvSock,tampon,sizeof(tampon));
        if (lect == -1)
        {
            perror("echec lire");
            exit (8);
        }
    }
     
    //recuperation du login et du nom de la machine
    int i=0, j=0;
    char login[64], nomMach[50];
     
    while (tampon[i]!='@')
    {
        login[j]=tampon[i];
        i++;j++;
    }
    i++;j=0;
    while (tampon[i]!='\n')
    {
        nomMach[j]=tampon[i];
        i++;j++;
    }
    char * cmd1={"USER "},* cmd2={"PASS "};
    strcat(cmd1, login);
     
    //recuperation du mot de pass
    lect=read(nouvSock,tampon,sizeof(tampon));
    if (lect == -1)
    {
        perror("echec lire");
        exit (8);
    }
    while(lect != 0 && tampon[0]!='U')
    {
        lect=read(nouvSock,tampon,sizeof(tampon));
        if (lect == -1)
        {
            perror("echec lire");
            exit (8);
        }
    }     
    int n=0, m=0;
    char pass[64];
     
    while (tampon[n]!='\n')
    {
        pass[m]=tampon[n];
        n++;m++;
    }
    strcat(cmd2,pass);
    //recuperation de la commande list
    char list[64];
    lect=read(nouvSock,list,sizeof(list));
    if (lect == -1)
    {
        perror("echec lire");
        exit (8);
    }
     
    while(lect != 0 && list[0]!='U')
    {
        lect=read(nouvSock,list,sizeof(list));
        if (lect == -1)
        {
            perror("echec lire");
            exit (8);
        }
    }
     
     
     
    //recuperation de l'adresse IP
    caract=(gethostbyname(nomMach));
    if (caract==NULL)
    {
        perror("erreur gethostbyname");
        exit(3);
    }
    IP=ntohl(*((long*)caract->h_addr));
     
     
    //initialisation du nom externe d'une prise socket
    adrSock2.sin_family = AF_INET;
    adrSock2.sin_port=21;
    adrSock2.sin_addr.s_addr=ntohl(IP);
     
     
 
     
    //connection du proxy au serveur
    int fd_sock3;
     
    //creation d'un socket
    fd_sock3=socket(AF_INET,SOCK_STREAM,0);
    if (fd_sock==-1)
    {
        perror("socket!");
        exit(1);
    }
     
    //etablissement de la connexion
    err=connect(fd_sock3,(struct sockaddr *) &adrSock2, sizeof(adrSock2));
    if (err==-1)
    {
        perror("connection impossible");
        exit(2);
    }
     
    //ecriture des information retourné
    err=write(fd_sock3,cmd1,sizeof(cmd1));
    if (err==-1)
    {
        perror("erreur ecriture login");
        exit(2);
    }
    err=write(fd_sock3,cmd2,sizeof(cmd2));
    if (err==-1)
    {
        perror("erreur ecriture pass");
        exit(2);
    }
    err=write(fd_sock3,list,sizeof(list));
    if (err==-1)
    {
        perror("erreur ecriture list");
        exit(2);
    }
 
     
    //test de la connexion
    char res[64];
    err=read(fd_sock3,res,sizeof(res));
    if (err==-1)
    {
        perror("erreur lecture");
        exit(2);
    }
     
 
    close(fd_sock);
}



bonne chance!


Cette discussion est classée dans : exit, tampon, err, fd, perror


Répondre à ce message

Sujets en rapport avec ce message

probleme seeveur client [ par doberman7578 ] je voudrai avec ce serveur client transferer des jpeg mais sa ne marche pas et je ne comprend pas pourquoi,Pouvez vous m'aider svp, voici ce que j'ai memoire partagee [ par sparetime ] bonjourj'ai un pb avec ce code #include #include #include #include #include #include # intercepter exit [ par Gmrinfo ] J'aimerais intercepter un exit fait dans un bout de code afin que mon application ne s'arrete pas. J'utilise Borland c++ . Comment je peux faire ?En F arreter un select bloquand depuis un autre thread [ par cosmobob ] salut,sous windows, j'ai pas de probleme, mais sous linux, quel est le moyen pour qu'un thread qui bloque sur un select bloquant se débloque? shutdown socket sans fenêtre [ par CyberP ] Comment faire (avec exemple concret si possible) pour recevoir des messages de sockets (fd_recv, fd_connect, fd_accept) sans avoir de fenêtre (et sans gestion des event avec WSANETWORKEVENTS [ par Spiffou ] bonjour à tous,je voudrais votre avis sur la gestion des evenements sur les sockets.je réalise une application (un jeu) qui doit communiquer sur un ré [LINUX-RS232] Problème envoi-reception [ par JuJu ] Hello,Je suis nouveau sur linux et je connais un peu la prog en C et j'ai un problème avec la communication RS232. J'utilise Mandrake linux 10.1 sur l Entree std sous Windows [ par mgra ] Bonjour, Dans un des mes programmes, je dois surveiller un ensemble de descripteurs (plusieurs sockets et l'entrée std). J'initialise donc le tout Couleur d'un pixel d'une fenêtre glut en mode RGB [ par bigbara ] Bonjour à tous,Je voudrais savoir s'il existait une fonction permettant de récupérer les composantesde la couleur d'un pixel de coordonnées (x,y) d'un Du Delphi à C++ [ par BruNews ] Question n'est pas de moi, je remets cause l'originale a sauté. Bonjour tout le monde, j'ai le code d'une procédure en delphi que j'ai trouvé sur le


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales