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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 46
    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

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