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 :

Portabilité d'une fonction


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 49
    Points : 17
    Points
    17
    Par défaut Portabilité d'une fonction
    Bonjour à tous

    Je développez une application portable dans laquelle j'ai besoin de lister tout les pc connectés sur le réseaux local.
    Sous Windows pas de soucis avec "WNetOpenEnum()" etc, mais voila je ne sais pas comment faire pour les autres systèmes d'exploitation.

    Existe t-il une manière d'implémenter une seule fonction qui fonctionne pour tout les systèmes, avec une bibliothèque par exemple ?

    Sinon comment dois-je procéder pour effectuer cette opération sous les systèmes Unix ?

    Merci par avance pour votre aide.

  2. #2
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    WNetOpenEnum() ne liste pas tous les PC connectés au réseau.

    WNetOpenEnum() enumère toutes les ressources Netbios/Microsoft disponibles sur le réseau. Une petite particularité qu'il ne faut pas perdre de vue, c'est que WNetOpenEnum() utilise le protocole Microsoft netbios.

    Un serveur WWW est une ressource du réseau au même niveau qu'un serveur de base de données et pourtant WNetOpenEnum() ne les verras pas.

    Un PC connecté au réseau local s'énumère avec le protocole ARP. C'est le seul qui indique cette adresse IP est occupée avec cette adresse MAC et ce n'est pas tout fait la même vision que WNetOpenEnum().

    Donc quand tu dis "je veux énumérer les PC connectés", il faut bien définir ce que tu entends énumérer. Ensuite, le protocole à utiliser coulera de source en fonction de ton besoin et enfin la fonction à utiliser (pour autant qu'il y en ait une toute faite).
    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
    .

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 49
    Points : 17
    Points
    17
    Par défaut
    Bonjour

    merci pour ta réponse.

    Effectivement je ne me suis pas très clairement exprimé. Mon application se décompose en deux parties, la première étant le serveur et la seconde les clients. Le serveur est lancé sur une machine quelconque (plusieurs serveurs peuvent être lancés). Les clients sont lancés également sur des machines quelconques et pour ces clients je cherche à obtenir la liste des ordinateurs (identifié par leurs adresse IP) ou se trouve un serveur.

    Pour réaliser cette fonctionnalité, je l'ai découpée en deux partie, un première fonction qui se charge de lister l'ensemble des ordinateurs appartenant au réseau local de client. Et une deuxième fonction qui pour chaque ordinateurs retourné tente une connexion sur un port particulier afin de savoir si oui ou non il y a un serveur pour cette application qui tourne actuellement sur la machine.

    Voila je ne sais pas si c'est suffisamment clair tout cela...
    Dites le moi si vous avez d'avantage d'informations pour comprendre ce que doit faire la fonction.

  4. #4
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par mohdaef Voir le message
    un première fonction qui se charge de lister l'ensemble des ordinateurs appartenant au réseau local de client.
    Comme c'est du réseau local (et UNIQUEMENT local) Une énumération basée sur le protocole ARP est la seule qui retournera la liste exhaustive des machines connectée à ce réseau local.
    Il faut pour cela envoyer un paquet ARP en demandant une adresse IP quelconque de ton réseau local si il y a une réponse, c'est que l'adresse IP est présente et active, si il n'y a pas de réponse, tu recommences un certain nombre de fois (3) avant de déclarer "Il n'y a personne derrière cette adresse IP"

    Tu fais cette requête ARP pour toutes les IP potentielles de ton réseau local. Le protocole ARP est un protocole rapide, tu devrais arriver à scanner une classe C complète (256 adresses) en moins d'une minute. Pour obtimiser le nombre de requêtes, tu peux aussi demander à ton cache ARP local si il connait cette adresse IP, si oui, pas de requête à envoyer.

    Citation Envoyé par mohdaef Voir le message
    Et une deuxième fonction qui pour chaque ordinateurs retourné tente une connexion sur un port particulier afin de savoir si oui ou non il y a un serveur pour cette application qui tourne actuellement sur la machine.
    Alors la fonction WNetOpenEnum() n'est d'aucune utilité pour toi. Elle ne liste que des services en rapport avec Netbios (partage de fichiers, imprimantes).

    Pour ton cas, tu ouvres une connexion sur ton port particulier et optionnellement, tu testes si le serveur à l'écoute de ce port particulier parle bien le protocole que tu attends (avec une requête particulière que tu dois implémenter dans le genre GetVersion). En effet, il est très facile de mettre un serveur Web HTTP sur le port 22, ce n'est pas pour autant que le serveur à l'écoute sur le port 22 est un serveur SSH. Il faut tester le protocole pour en être vraiment sûr.
    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
    .

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 49
    Points : 17
    Points
    17
    Par défaut
    Salut

    En effet, dans ce cas là c'est exclusivement pour un réseau local, mon programme à une ouverture sur internet pour accéder à des serveur, mais il faut explicitement entrer l'adresse IP pour y accéder.

    WNetOpenEnum() m'a bien aidé pourtant pour trouver les serveur à partir de Windows, j'arivve à obtenir en se concentrant juste sur les poste de travail,la liste des IP actives en moins d'une seconde sur un réseau de classe C (pratique).

    Ok merci pour ta réponse Je ne sais pas encore trop comment faire parce qu'une minutes pour lister les serveur sur le réseau local ça fait long, très long pour les utilisateurs.

Discussions similaires

  1. Comment chronométrer une fonction
    Par 323 dans le forum Pascal
    Réponses: 3
    Dernier message: 19/03/2003, 20h24
  2. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48
  3. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22
  4. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

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