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

Réseau C Discussion :

Ouvrir Port C/C++


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Ouvrir Port C/C++
    Bonjour,

    Je dois faire des projets en C/C++ sur une machine tournant sous XP et un des projets consiste à écrire un code (en C/C++) qui permet:
    1) D'ouvrir un port de l'ordi sur lequel on est (local) pour qu'on puisse faire un telnet au port qu'on a ouvert. (Parâit que ça prend même pas 30 lignes ...)
    2) De lancer un Bash quand on se connect à ce port ouvert.

    Est-ce que quelqun a un site web pour débutants avec des instructions pour faire ce genre de code ou un code source qui est bien commenté ?

    Merci d'avance pour toute aide ;o)

    FUN

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Hmmm...
    En C/C++ ?

    Faudrait se décider hein... Ce ne sont pas les mêmes langages/compilateurs qui sont en jeu...

    Alors, C ou C++ ?
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    C ou C++ ... c'est égal dès le moment que ça marche

    Mais s'il fallait n'en choisir qu'un je dirais C

  4. #4
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Tu peux en effet créer un socket en C

    Je file toujours le même lien (qui doit surcharger le serveur d'ailleurs ) :
    http://emmanuel-delahaye.developpez....tes-reseaux-c/

    Tout est bien détaillé.
    Si tu as des questions, n'hésites pas

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Je connais ce site ... c'est d'ailleurs l'un de ceux que j'analyse actuellement , mais il y a bcp de code (par rapport aux mêmes pas 30 lignes que c'est sensé prendre ...)

    Perso pour l'instant ce qui m'a le plus aidé c'est le tuto de The Walrus sur developpez.com ... même si j'ai toujours pas la moindre idée de comment faire pour que le programme lance un Bash quand je me connecte en telnet sur le port ouvert

  6. #6
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Pour lancer le batch, suffit d'utiliser la fonction system().
    Sinon c'est vrai qu'il y a beaucoup de code, mais en fait il vérifie à chaque fois si une erreur n'est pas retournée par la fonction
    Tu peux éventuellement le décortiquer pour ne garder que ce qui t'intéresse.

    Edit : correction

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Freed0
    Pour lancer le patch,
    Bash, patch ... c'est la fête... batch, peut être ?
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Désolé j'avais lu batch et j'ai écris patch :o

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Freed0
    Désolé j'avais lu batch et j'ai écris patch :o
    En fait il s'agit plutôt de bash, c'est à dire un interpréteur de commandes ...
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Pour l'instant j'arrive a faire un serveur qui me repond coucou quand je me connecte en telnet dessus:

    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
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
     
    void main()
    {
    	WSADATA WSAData;
    	WSAStartup(MAKEWORD(2,0), &WSAData);		// Dîre qu'on ve utiliser des sockets
     
    	SOCKET sock;
    	SOCKET csock;
    	SOCKADDR_IN sin;
    	SOCKADDR_IN csin;
     
    	sock = socket(AF_INET, SOCK_STREAM, 0);		// Création socket
    	sin.sin_addr.s_addr			= INADDR_ANY;	// Adresse IP
    	sin.sin_family				= AF_INET;		// Famille du socket
    	sin.sin_port				= htons(23);	// N° de port
    	bind(sock, (SOCKADDR *)&sin, sizeof(sin));
     
    	listen(sock, 0);							// boucle d'écoute
    	while(1)
    	{
    		int sinsize = sizeof(csin);
    		if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
    		{
    			send(csock, "Coucou!\r\n", 14, 0);
    		}
    	}
    }

    Par contre je m'en sort toujours pas avec system() et recv() pour ouvrir un bash

    qqn pourrait m'aider please ?

    FUN

  11. #11
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Juste pour faire 2-3 remarques sur ton code actuel :
    • * Le premier argument de la fonction socket(), c'est PF_INET et non AF_INET.
      AF_INET = Address Family (utilisé par socket())
      PF_INET = Protocol Family (utilisé par sin_family)
    • * N'oublies pas d'utiliser la fonction WSACleanup() à la fin de ton programme pour stopper l'utilisation de ws2_32.dll.
    • * Tu peux utiliser la version 2,2 des sockets. Remplaces donc par MAKEWORD(2,2)
    • * Remplaces aussi INADDR_ANY par htonl(INADDR_ANY) (host to network long) si tu veux écouter sur toutes les IP.

    Voilà bonne continuation

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Remplaces aussi INADDR_ANY par htonl(INADDR_ANY) (host to network long) si tu veux écouter sur toutes les IP.
    Ça, c'est de la paranoia.
    INADDR_ANY c'est 0. Et quel que soit l'ordre des octets de la machine, 0 c'est toujours 0.
    Boost ftw

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par loufoque
    Remplaces aussi INADDR_ANY par htonl(INADDR_ANY) (host to network long) si tu veux écouter sur toutes les IP.
    Ça, c'est de la paranoia.
    INADDR_ANY c'est 0.
    Non INADDR_ANY, c'est INADDR_ANY. Point. On a pas à connaitre la valeur réelle. Il a donc raison d'utiliser htonl(). C'est pas de la paranoia, c'est de la bonne programmation qui tient compte d'un certain degré d'abstraction qui semble manquer à certains...
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Il est totalement impossible que ce soit autre chose que 0 avec un système IP.
    Donc à part si le code doit être compatible avec une dimension parallèle, c'est inutile.
    Boost ftw

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par loufoque
    Il est totalement impossible que ce soit autre chose que 0 avec un système IP.
    Donc à part si le code doit être compatible avec une dimension parallèle, c'est inutile.
    Qui parles d'un système IP ? Et en IPV6, c'est quoi ?
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Qui parles d'un système IP ?
    PF_INET -> IPv4

    Et en IPV6, c'est quoi ?
    Je ne sais pas mais je suppose que ça doit être la même chose.
    Boost ftw

  17. #17
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci a tous pour votre aide ^^

    Voilà l'avant-dernière version qui marche:

    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
    #include <winsock2.h>
    #include <windows.h>
     
    #pragma comment(lib, "ws2_32.lib")
     
    void main()
    {
    	WSADATA WSAData;
    	WSAStartup(MAKEWORD(2,0), &WSAData);		// Dîre qu'on ve utiliser des sockets
     
    	SOCKET sock;
    	SOCKET csock;
    	SOCKADDR_IN sin;
    	SOCKADDR_IN csin;
     
    	PROCESS_INFORMATION pi;
    	STARTUPINFO si;
     
    	sock = socket(AF_INET, SOCK_STREAM, 0);		// Création socket
    	sin.sin_addr.s_addr			= INADDR_ANY;	// Adresse IP
    	sin.sin_family				= AF_INET;		// Famille du socket
    	sin.sin_port				= htons(8888);	// N° de port
    	bind(sock, (SOCKADDR *)&sin, sizeof(sin));
     
    	listen(sock, 0);							// boucle d'écoute
    	while(1)
    	{
    		int sinsize = sizeof(csin);
     
    		GetStartupInfo(&si);      // creating startupinfo for child process
     
    		if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
    		{
    			CreateProcess(NULL, "cmd.exe", NULL, NULL,TRUE, CREATE_NEW_CONSOLE,NULL,NULL,(STARTUPINFO*)&si,&pi);
    		}
    	}
    }
    Ps: je ferais les petites corrections que vous m'avez citée des que j'aurais un moment

    => merci encore

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par loufoque
    Remplaces aussi INADDR_ANY par htonl(INADDR_ANY) (host to network long) si tu veux écouter sur toutes les IP.
    Ça, c'est de la paranoia.
    INADDR_ANY c'est 0.
    Non INADDR_ANY, c'est INADDR_ANY. Point. On a pas à connaitre la valeur réelle. Il a donc raison d'utiliser htonl(). C'est pas de la paranoia, c'est de la bonne programmation qui tient compte d'un certain degré d'abstraction qui semble manquer à certains...
    J'ai longtemps ignoré s'il fallait un htonl() pour les "constantes adresses" (qui auraient pu être déjà au format network, tout comme une adresse retournée par inet_addr()). Je viens de tester avec INADDR_LOOPBACK (la seule "constante adresse" non-palindrome), la réponse est oui: htonl() est nécessaire pour les "constantes adresses", donc oui, il faut le mettre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouvrir port 21 via ssh
    Par antxbe dans le forum Réseau
    Réponses: 9
    Dernier message: 20/11/2008, 17h57
  2. [Lazarus] Code pour ouvrir port serie rs232
    Par jumel dans le forum Lazarus
    Réponses: 3
    Dernier message: 06/01/2008, 11h57
  3. comment ouvrir Port 25 !
    Par rach20032 dans le forum Réseau
    Réponses: 1
    Dernier message: 25/07/2007, 09h31
  4. Ouvrir port sur freebox V5
    Par scoulet dans le forum Hardware
    Réponses: 3
    Dernier message: 02/10/2006, 16h47
  5. Ouvrir port Linux pour chat en Flash
    Par Benjamin76 dans le forum Réseau
    Réponses: 4
    Dernier message: 05/05/2006, 13h34

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