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 :

Reconnaitre un serveur


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 79
    Par défaut Reconnaitre un serveur
    Bonjour,

    Je voudrais faire un processus serveur qui communiquerait avec un processus client (qu'on appellera A). Cependant, il y a un problème dont je n'ai pas trouvé la solution sur internet:

    Mon serveur est connecté à un port et attend que le client se connecte. Toutefois, si il y a un autre client/serveur (qu'on appellera B) qui utilise le même port, alors le serveur B peut se mettre en attente et accepter le client A, qui croira qu'il s'est connecté au client A, ou le serveur A peut se mettre en attente et accepter le client B, en croyant que c'est le client A.

    Pourriez vous m'indiquer un moyen pour que mes client/serveur sache s'ils communiquent bien avec le bon processus ou me dire si j'ai mal compris le fonctionnement des sockets en client/serveur, svp?

    J'ai pensé à une sorte de protocole: à la connection, le serveur doit envoyer "bonjour, je suis le serveur de Nonozor" et le client doit envoyé "bonjour, je suis le client de Nonozor", ce qui les identifierait.

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par nonozor Voir le message
    Mon serveur est connecté à un port et attend que le client se connecte. Toutefois, si il y a un autre client/serveur (qu'on appellera B) qui utilise le même port, alors le serveur B peut se mettre en attente et accepter le client A, qui croira qu'il s'est connecté au client A, ou le serveur A peut se mettre en attente et accepter le client B, en croyant que c'est le client A.
    J'ai rien compris!!!

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    J'ai l'impression que ta question en fait est "comment être sûr que je suis connecté au bon service".

    Il n'y a pas de réponse 100% sûre. En effet, rien n'enterdit que je fasse tourner mon serveur telnet (port TCP 23 normallement) sur le port TCP 80 (port réservé au serveur http normallement). C'est idiot je le reconnais mais cela peut se faire.

    Il faut bien voir que principalement, ce qui lie un serveur et un client est le protocole.
    Si tu me dit "bonjour" et que je te répond "je mesure 1,72m", on ne va pas se comprendre et le protocole est rompu.

    Donc ton idée de message "j'implémente le protocole tartampion" et "je ne veux parler que le protocole tartampion" n'est pas idiote, d'ailleurs tous les protocoles le font. Quelque part, le numéro de port du serveur fait aussi partie plus ou moins du protocole (il y a de forte chances que sur le port TCP 23, on y parle le protocole telnet).

    Après, ces échanges sont plus ou moins complexes suivant la qualité de l'assurance que l'on veut (et aussi la richesse du protocole). Ceci dit les principaux protocoles (pop, smtp, http, ftp, ...) ont des échanges protocolaires très simples donc ne te prend pas trop la tête à inventer un protocole hyper sophistiqué.

    La première réponse que font la plupart des serveur en cas de rupture de protocole est de rompre la connexion (tu ne me parles pas bien alors dégage). Une autre réponse possible est le crash (cela arrive aussi)

    Il y a des outils comme nmap (www.insecure.org) qui savent reconnaitre les protocoles en les "sondant". Si tu fait tourner un serveur telnet sur le port 80, nmap va quand même reconnaitre un serveur telnet. Regarde du côté des sources pour voir comment il fait.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 79
    Par défaut
    Merci de ta réponse!

    Ma question est bien "comment être sûr que je suis connecté au bon service".

    Le port indique qu'on est sur le bon service quand on utilise un "well known service".
    Cependant, étant donné que je code une petite application dans mon coin, je pense que je suis sensé utilisé un port supérieur à 1023, par exemple 1030. Si il y a une autre application dans le même cas que la mienne, qui choisie aussi le port 1030, on se retrouve dans l'exemple que j'ai donné dans mon premier post: un client/serveur A et un client/serveur B qui utilisent le même port, ce qui crée un quiproquo, puisque le serveur ne saura pas si c'est le client A ou le B qui se connecte et que le client ne saura pas si il se connecte au serveur A ou au B.

    Est ce que je ne me trompe pas?
    Si je ne me trompe pas, la solution serait donc d'utiliser un protocole simple, comme celui dont je parlais dans mon premier post?

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par nonozor Voir le message
    Le port indique qu'on est sur le bon service quand on utilise un "well known service".
    C'est un début d'indication. Pour info aussi, il y a des well know services > 1023 (3306 est le port de MySQL par exemple)

    Citation Envoyé par nonozor Voir le message
    Cependant, étant donné que je code une petite application dans mon coin, je pense que je suis sensé utilisé un port supérieur à 1023, par exemple 1030.
    Par forcémment, l'avantage des ports > 1023 est qu'il ne nécessitent pas le besoin des privilège "root" ou "admin" pour les binder.

    Citation Envoyé par nonozor Voir le message
    Si il y a une autre application dans le même cas que la mienne, qui choisie aussi le port 1030
    Si les 2 applications tentent de se lancer en même temps, la 2eme qui tentera de binder le socket prendra une erreur ("port already used" ou quelquechose comme cela). Il est toutefois possible de passer outre avec des options dans le bind() (mais cela ne présente guère d'intérêt dans la majorité des cas). Ce cas de figure est symptomatique d'un problème de configuration.

    Citation Envoyé par nonozor Voir le message
    ce qui crée un quiproquo, puisque le serveur ne saura pas si c'est le client A ou le B qui se connecte et que le client ne saura pas si il se connecte au serveur A ou au B.
    Le même genre de qui proquo qu'un client http qui se connecte sur un serveur telnet mais en général, et le client et le serveur s'en rendent rapidement compte et la connexion est fermée (ou le programme crashé)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 79
    Par défaut
    D'accord.

    La meilleure solution à mon problème me semble donc imposer un protocole d'identification à mon serveur et à mon client juste après la connection: le client vérifie que le serveur est le bon en regardant si il lui envoie le message "je suis le serveur de Nonozor" et ferme la connection dans le cas contraire et le serveur fait de même (il vérifie que le client connecté est le bon en regardant si il lui envoie le message "je suis le client de Nonozor").

    L'avantage est que je n'aurai pas besoin de faire du code défensif dans la suite de la connection pour vérifier que les paquets envoyés sont ceux attendus puisque le client et le serveur sont forcément les bons et qu'ils envoient donc les bons paquets, une fois qu'ils ont passé le test d'identification.

    Est tu d'accord?
    Connais tu une meilleure solution?
    Merci d'avance.

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

Discussions similaires

  1. Reconnaitre le serveur sur tous les PC !
    Par Rémiz dans le forum Apache
    Réponses: 6
    Dernier message: 10/11/2005, 22h16
  2. Langage le mieux adapté pour application client serveur ?
    Par guenus dans le forum Débats sur le développement - Le Best Of
    Réponses: 4
    Dernier message: 17/06/2002, 15h46
  3. couper une connection avec un serveur corba
    Par pons dans le forum CORBA
    Réponses: 3
    Dernier message: 31/05/2002, 10h11
  4. Réponses: 2
    Dernier message: 29/05/2002, 20h43
  5. [Kylix] IP d'un serveur;....
    Par yopziggy dans le forum EDI
    Réponses: 16
    Dernier message: 24/05/2002, 09h01

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