IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Ecoute de ports


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Par défaut Ecoute de ports
    Bonjour à tous,

    J'ai créer un Honeypot pour mon mémoir de fin d'année.
    Mon problème porte sur l'écoute des ports :
    J'ai fais un programme c++ (sur devcpp sous windows) pour écouter les ports et répondre aux connexions qui s'y fonds. J'arrive à le faire pour un port mais je n'y arrive pas pour plusieurs port en même temps. J'ai beau faire, il n'écoute un deuxième port que lorsque le premier port(socket) à fini d'être utilisé(est fermé).
    Est-ce que quelqu'un serait comment faire ?

  2. #2
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Tu doit créer plusieurs socket qui ecoutent en même temps sur tes différents ports en passant par des Threads.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Par défaut
    Mais quand je lance plusieurs socket (à l'aide de thread) le programme attend l'arrête du premier pour lancer le second. Je dois mal le faire...

  4. #4
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Regarde ces 2 threads en relation avec ton problème.

    Algo

    Socket non bloquant exemple

  5. #5
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2006
    Messages : 20
    Par défaut AARrrrrgggg !!!!
    Merci beaucoup pour l'aide mais je n'y arrive toujours pas...
    Voici la partie qui doit être dupliqué (thread) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
        // Création du socket
    	if( ( ListeningSocket = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP ) ) == INVALID_SOCKET ){
    		cerr << "ne peut créer la socket. Erreur n° " << WSAGetLastError()<< endl;
    		WSACleanup();
    		return 1;
    	}
     
        // bind fournit à la socket ListeningSocket, l'adresse locale (SOCKADDR *)&ServerAddr. L'adresse est longue de sizeof( ServerAddr ) octets.
    	if( bind( ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof( ServerAddr ) ) == SOCKET_ERROR ){
    		cerr << "bind a échoué avec l'erreur " << WSAGetLastError() << endl;
    		cerr << "Le port est peut-être déjà utilisé par un autre processus " << endl;
    		closesocket( ListeningSocket );
    		WSACleanup();
    		return 1;
    	}
     
     
        // Connection (côté client)
        erreur=connect(NewConnection,(struct sockaddr*)&ServerAddr,sizeof(ServerAddr));
        if (erreur!=0)
             printf("\nDesole, je n'ai pas pu ouvrir la session TCP : %d %d",erreur,WSAGetLastError());
             else
                   printf("\nsetsockopt  : OK");
     
        // Ecoute sur le port
    	if( listen( ListeningSocket, 5 ) == SOCKET_ERROR ){
    		cerr << "listen a échoué avec l'erreur " << WSAGetLastError() << endl;
    		closesocket( ListeningSocket );
    		WSACleanup();
    		return 1;
    	}
     
    	cout << "serveur démarré : à l'écoute du port " << port << endl;
    	running = true;
    	ClientAddrLen = sizeof( ClientAddr );
     
    	while(running){
     
     
            // Acceptation de la connexion 
    		if((NewConnection = accept( ListeningSocket, (SOCKADDR *) &ClientAddr, &ClientAddrLen)) == INVALID_SOCKET){
    			cerr  << "accept a échoué avec l'erreur " << WSAGetLastError() << endl;;
    			closesocket( ListeningSocket );
    			WSACleanup();
    			return 1;
    		}
     
    		p.ser = this;
    		p.soc = NewConnection;
     
    		cout << "client connecté ::  IP : " <<inet_ntoa( ClientAddr.sin_addr )<< " ,port = " <<ntohs( ClientAddr.sin_port ) << endl;
     
            // Création du thread contenant le serveur
    		hProcessThread = CreateThread(NULL, 0,&serveur::ThreadLauncher, &p,0,NULL);
    		if ( hProcessThread == NULL ){
    			cerr << "CreateThread a échoué avec l'erreur " <<GetLastError()<< endl;
    		}
     
    		// Prise d'information sur le pirate connecté
            cout << system("whois") << endl ;
     
     
            // Envoi des données côtté client
            strcpy(buffer,"Bienvenu sur le serveur Apache/ 1.3.27 <HTML><HEAD><TITLE>400 Bad Request</TITLE></HEAD><BODY><H1>Bad Request</H1>Your browser sent a request that this server could not understand.<P>The request line contained invalid characters following the protocol string.<P><P><HR><ADDRESS> 192.168.1.30 at & Port 80</ADDRESS></BODY></HTML>"); // Copie la chaine de caractère dans buffer
            nombre_de_caractere=send(NewConnection,buffer,strlen(buffer),0);
            if (NewConnection==SOCKET_ERROR)
               printf("\nDesole, je n'ai pas envoyer les donnees du a l'erreur : %d",WSAGetLastError());
            else
                printf("\nsend        : OK");
     
     
          // Reception des données
          nombre_de_caractere=recv(NewConnection,buffer,1515,0) ;
          if (nombre_de_caractere==SOCKET_ERROR)
                cout << "Desole, je n'ai pas recu de donnee" << endl ;
          else
                {
                buffer[nombre_de_caractere]=0; // Permet de fermer le tableau après le contenu des data, car la fonction recv ne le fait pas
                cout << "\nVoici les donnees : " << buffer << endl ;
                }
     
          // Fermeture de la session TCP Correspondant à la commande connect()
          erreur=shutdown(NewConnection,2); // 2 signifie socket d'émission et d'écoute
          if (erreur!=0)
                printf("\nDesole, je ne peux pas fermer la session TCP du a l'erreur : %d %d",erreur,WSAGetLastError());
          else
                printf("\nshutdown    : OK");
     
     
          // Envoi et reception des données.
            bytesSent = send( NewConnection, sendbuf, strlen(sendbuf), 0 );
            printf( "Bytes Sent: %ld\n", bytesSent );
     
             while( bytesRecv == SOCKET_ERROR ) {
                    bytesRecv = recv( NewConnection, recvbuf, 32, 0 );
                    if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
                       printf( "Connection Closed.\n");
                       break;
                    }
                    printf( "Bytes Recv: %ld\n", bytesRecv );
                                cout << "c'es bon  3" << endl ;
             }
    	}
     
    	return 0;
    }
    Pourrais tu me donner un coup de main ?

    Merci d'avance

  6. #6
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Balises [CODE] stp, c'est illisible

  7. #7
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Je n'arrive pas à comprendre la succession de code type

    // Connection (côté client)
    Ce que tu as montré niveau code ressemble à pleins de petits bouts côté client et serveur, que tu as mélangé, c’est le cas ???

    Le "CreateThread" intervient après le code que tu nous montres….


Discussions similaires

  1. Ecouter un port sur un réseau
    Par zouheir dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 16/08/2006, 02h03
  2. [VB] Winsock ecoute de port
    Par bender23 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/05/2006, 17h57
  3. [Système] Ecouter un port serveur Java
    Par sozie9372 dans le forum Langage
    Réponses: 3
    Dernier message: 19/01/2006, 21h35
  4. Ecouter le port de téléphonie sur IP
    Par WOLO Laurent dans le forum Développement
    Réponses: 6
    Dernier message: 24/09/2005, 12h43
  5. [UDP][Socket] perte de paquets et arret d'ecoute sur port
    Par Guismo1979 dans le forum Développement
    Réponses: 6
    Dernier message: 02/01/2003, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo