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

Windows Discussion :

API window et reseau


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 55
    Points : 37
    Points
    37
    Par défaut API window et reseau
    Bonjour,

    C'est un appel au secours...le msdn de microsoft n'est vraiment pas tres ludique et je cherche désesperement quelqu'un pour m'aider..
    Voila je cherche à savoir depuis un poste de travail, s'il existe une machine dont j'ai le nom et le domaine voir l'adresse mac sur un intranet (cas d'un reseau d'ntreprise). Le tout en API window, pas de .net pas de java, aucun framework (A executer sur n'iporte quel poste client). J'ai cherché de ce côté http://msdn2.microsoft.com/en-us/library/aa370663.aspx mais ca n'a pas abouti.

    Merci d'avance

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Wmi
    Bonjour,

    tu peux pour cela utiliser les classes WMI, et plus particulièrement la classe Win32_NetworkAdapter : l'objet MACAddress devrait te fournir l'information que tu souhaites.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par groovyroe
    [...] mais ca n'a pas abouti. [...]
    C'est à dire ?
    Pourquoi ?
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Points : 77
    Points
    77
    Par défaut
    C'est à dire ?
    Pourquoi ?
    Je pense qu'il veut dire que les fonctions de type Netxxxx (ex: NetWkstaGetInfo() ) qui permettent d'interroger les machines d'un domaine Windows ne permettent pas de récupérer l'adresse MAC.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par nunch
    Je pense qu'il veut dire que les fonctions de type Netxxxx (ex: NetWkstaGetInfo() ) qui permettent d'interroger les machines d'un domaine Windows ne permettent pas de récupérer l'adresse MAC.
    En cherchant un peu, on dirait que certaine le permettent :
    Netbios()
    NCB (cf. NCBASTAT)
    ADAPTER_STATUS (cf. "UCHAR adapter_address[6];")
    Mais il doit y avoir plus récent.
    En tous cas, si la commande nbtstat peut afficher une adresse MAC et étant donné qu'il y a peu de chances qu'elle n'utilise pas une fonction liée à NetBIOS, c'est que c'est probablement possible.

    J'ai une autre piste mais j'ai de gros doutes à son sujet, donc je n'en parle pas...

    Enfin, pour ce qui est de ce qu'il a voulu dire, AMHA c'est à lui de le dire, pas aux autres d'essayer de le deviner. Je ne suis pas devin et pas mal d'autres non plus.

    ---- EDIT 1 : DEBUT ----
    Je viens d'essayer avec NetServerTransportEnum() et cela fonctionne. Il y a même une exemple de code. Je vous laisse le modifier pour qu'il affiche l'adresse MAC : je ne vais pas tout vous faire.
    ---- EDIT 1 : FIN ----
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    David.Schris a écrit :
    C'est à dire ?
    Pourquoi ?
    Mon projet est construit sous PowerBuilder, je declare donc des fonctions externes dans mon code en indiquant la librairie windows à utiliser. Les problèmes surviennent dans la convertion des types des variables.
    D'autre part, j'ai très peu de notions C ou C++ ( j'ai bien tenté de créer une DLL avec l'utilsation de fontctions mais la compilation m'indique des erreurs dans les headers du systeme...en cherchant un peu j'ai trouvé un cas similaire mais aucune réponse n'a été formulé) alors je serais très reconnaissants de quelques exemples ( J'ai réussi à impléménter quelques fonctions à partir de code VB : IcmpCloseHandle(), IcmpSendEcho,... mais que des fonctions basiques).
    Je rapelle quelques contraintes à mon problème :
    - Le serveur (poste à rechercher) n'est pas conscient que l'on effectue des requêtes, on ne lance aucun service.
    - Le poste client peut-être de windows 98 à Vista, tandis que le serveur n'est pas forcement sous Windows (!)
    - Le poste client est un poste de travail au sein d'une entreprise et le serveur est l'hôte du service SGBD d'une entreprise...

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par groovyroe
    Mon projet est construit sous PowerBuilder
    Je ne connais pas

    Citation Envoyé par groovyroe
    je declare donc des fonctions externes dans mon code en indiquant la librairie windows à utiliser. Les problèmes surviennent dans la convertion des types des variables.
    Voir "Prototyping API Calls for PowerBuilder".

    Citation Envoyé par groovyroe
    D'autre part, j'ai très peu de notions C ou C++
    Ce n'est pas un problème : cela s'apprend.

    Citation Envoyé par groovyroe
    j'ai bien tenté de créer une DLL avec l'utilsation de fontctions mais la compilation m'indique des erreurs dans les headers du systeme...en cherchant un peu j'ai trouvé un cas similaire mais aucune réponse n'a été formulé
    Une DLL en C ? Si oui, crée un thread dans le forum "Développement Windows" en donnant des éléments concrets et concis (i.e. : complets et pas trop longs).

    Citation Envoyé par groovyroe
    alors je serais très reconnaissants de quelques exemples ( J'ai réussi à impléménter quelques fonctions à partir de code VB : IcmpCloseHandle(), IcmpSendEcho,... mais que des fonctions basiques).
    Des exemples dans quel langage ?

    Citation Envoyé par groovyroe
    Je rapelle quelques contraintes à mon problème :
    - Le serveur (poste à rechercher) n'est pas conscient que l'on effectue des requêtes, on ne lance aucun service.
    - Le poste client peut-être de windows 98 à Vista, tandis que le serveur n'est pas forcement sous Windows (!)
    - Le poste client est un poste de travail au sein d'une entreprise et le serveur est l'hôte du service SGBD d'une entreprise...
    Si :
    1. le serveur n'est pas sous Windows ;
    2. un poste client doit obtenir l'adresse MAC du serveur ;
    3. les deux font partie d'un réseau d'entreprise et peuvent être séparés par un routeur [1] ;
    4. il n'est pas possible de lancer un service (supplémentaire) sur le serveur.
    Je vois mal comment l'adresse MAC pourra être récupérée.

    La question que l'on peut se poser est : pourquoi un poste de travail devrait-il pouvoir récupérer l'adresse MAC d'un serveur ?
    Tu peux me dire : "ce n'est pas la question que je pose".
    Mais je me demande si cette volonté de vouloir récupérer cette adresse ne serait pas, plutôt qu'un problème posé, une mauvaise solution à un (autre) problème mal formulé.

    Cordialement,
    DS.


    [1] - Car le client et le serveur ne connaîtront, dans ce cas, que l'adresse MAC du routeur.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    La question que l'on peut se poser est : pourquoi un poste de travail devrait-il pouvoir récupérer l'adresse MAC d'un serveur ?
    Tu peux me dire : "ce n'est pas la question que je pose".
    Mais je me demande si cette volonté de vouloir récupérer cette adresse ne serait pas, plutôt qu'un problème posé, une mauvaise solution à un (autre) problème mal formulé.
    Notre entreprise développe un logiciel client/serveur. Nous aimerions vérifier la validité des informations des postes clients et du serveur à chaque connection pour s'assurer que le logiciel n'a pas été installé sur un autre réseau (Comparaison avec les données de nos tables, renseignée au moment de l'achat du logiciel). Nous aimerions gérer cette vérification du coté client, donc on récupère assez facilement les informations systèmes du client (domaine, nom de machine et adresse mac). Pour le serveur, le pb survient effectivement dans le cas de reseaux d'entreprise contenant des routeurs et des OS différents. Comme il est assez simple de changer le nom de machine et le domaine, nous aurions aimé déterminer l'adresse Mac.

    Si :
    le serveur n'est pas sous Windows ;
    un poste client doit obtenir l'adresse MAC du serveur ;
    les deux font partie d'un réseau d'entreprise et peuvent être séparés par un routeur [1] ;
    il n'est pas possible de lancer un service (supplémentaire) sur le serveur.
    Je vois mal comment l'adresse MAC pourra être récupérée.
    Je pensais que seul l'adresse IP était masqué par un routeur...

    Dans ces conditions, nos vérifications ne se porteront sans doute que sur le domaine et le nom de machine du serveur.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par groovyroe
    Notre entreprise développe un logiciel client/serveur. Nous aimerions vérifier la validité des informations des postes clients et du serveur à chaque connection pour s'assurer que le logiciel n'a pas été installé sur un autre réseau (Comparaison avec les données de nos tables, renseignée au moment de l'achat du logiciel). Nous aimerions gérer cette vérification du coté client [...]
    C'est pour le moins original (<- ceci n'est pas une critique ni une remarque ironique) : le schéma "classique" de gestion des licences consiste, il me semble (je peux me tromper), en la vérification par le serveur :
    - que les clients ne sont pas en nombre plus important que ce qui a été acheté ;
    - qu'il est bien installé sur la machine sur laquelle il est censé l'être.
    Mais pourquoi pas ?

    Citation Envoyé par groovyroe
    Pour le serveur, le pb survient effectivement dans le cas de reseaux d'entreprise contenant des routeurs et des OS différents. Comme il est assez simple de changer le nom de machine et le domaine, nous aurions aimé déterminer l'adresse Mac.
    Ici, tu sembles opposer la simplicité de modifier un nom de machine/domaine [1] à la difficulté de modifier une adresse MAC. Si c'est le cas, tu fais probablement partie des gens à qui on a appris qu'une adresse MAC était écrite "en dur" dans la carte réseau et n'était, par définition, pas modifiable, n'est-ce pas ? Penser cela serait une erreur : sous Linux, pour ne citer que cet exemple, taper une commande suffit à changer d'adresse MAC [2].
    Cette remarque ne veut pas dire qu'il faut abandonner votre idée : il faut simplement savoir que ce n'est pas infaillible.

    Citation Envoyé par groovyroe
    Je pensais que seul l'adresse IP était masqué par un routeur...
    Un peu de lecture, extrait d'un cours sur le routage et plus particulièrement de la partie décrivant le dialogue entre deux machines distantes :
    Citation Envoyé par [url=http://www.frameip.com/routage/#8.5_-_Quelques_remarques]8.5 - Quelques remarques[/url]
    - Les adresses MAC source et destination sont modifiées à chaque passage par un routeur

    Oui, et c'est normal. Ces adresses MAC sont relatives à la couche 2 dont le rôle principal est le dialogue sur un réseau local. Donc les adresses MAC utilisées dans une trame doivent être en relation avec le réseau sur lequel on se situe, pas celui d'à coté ;-)

    Que se passerait-il si une adresse MAC de destination était celle d'une interface étant sur un autre réseau ? Ca ne marcherait plus :-( car la trame serait envoyée sur le réseau local (en couche 2) et ne trouverait pas de machine ayant cette adresse MAC. La trame serait donc perdue.
    Les adresses MAC contenues dans une trame Ethernet doivent donc toujours être en rapport avec le réseau local. C'est ce qui explique qu'elles doivent être modifiées à chaque passage sur un nouveau réseau.

    - Par contre, les adresses IP source et destination n'ont pas été modifiées durant le transport de A à B

    Oui, et cela est encore normal ! La couche 3 concerne les informations de routage, donc sur des adresses appartenant à des réseaux distants. Ces adresses représentent donc les deux extrémités du dialogue et ne doivent pas être modifiées.
    La partie concernant les adresses IP n'étant valable que quand il n'y a pas mise en oeuvre d'un mécanisme de "Network Address Translation" (ce qui est le cas chez un grand nombre de particuliers ayant une connexion ADSL).


    Citation Envoyé par groovyroe
    Dans ces conditions, nos vérifications ne se porteront sans doute que sur le domaine et le nom de machine du serveur.
    Pourquoi se limiter ?
    Tu écrivais, plus haut : "Notre entreprise développe un logiciel client/serveur".
    Sauf mauvaise compréhension de ma part, cette phrase veut dire que vous développez le client ET le serveur. Dans ce cas, rien ne vous empêche, a priori, de faire en sorte que le serveur récupère son adresse MAC et la transmette aux clients pour vérification...

    En espérant avoir été utile...et pas trop démoralisant, cordialement,
    DS.


    [1] - D'ailleurs, "domaine" dans quel sens ? Comme dans "Domain Name Server" ou comme dans "contrôleur de domaine (Windows)" ?
    [2] - Sous Windows, c'est peut-être "un poil" (à peine) plus difficile (quand on n'a pas d'outil fait pour ça) mais faisable.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Tu écrivais, plus haut : "Notre entreprise développe un logiciel client/serveur".
    Sauf mauvaise compréhension de ma part, cette phrase veut dire que vous développez le client ET le serveur. Dans ce cas, rien ne vous empêche, a priori, de faire en sorte que le serveur récupère son adresse MAC et la transmette aux clients pour vérification...
    En réalité, il s'agit d'un abus de langage car il n'existe en fait qu'un serveur de base de données mais aucune application serveur. Peut-être dans un développement futur...cela résoudrait pas mal de problèmes.

    En tout cas merci pour toutes ces informations.

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par groovyroe
    En réalité, il s'agit d'un abus de langage car il n'existe en fait qu'un serveur de base de données mais aucune application serveur. Peut-être dans un développement futur...cela résoudrait pas mal de problèmes.

    En tout cas merci pour toutes ces informations.
    Ok.
    Dans ce cas, j'ai une autre piste : créer, sur le serveur, une procédure stockée permettant de récupérer son adresse MAC [1].
    La plupart des "gros" (<- c'est relatif...comprendre "courants"/"non exotiques") SGBD actuels permettent de lancer à peu près ce que l'on veut sur le serveur pour peu qu'on ait les droits suffisants.

    N'hésite pas à nous tenir informé de la solution choisie : cela pourrait servir à d'autres.

    Bon courage.

    [1] - Une requête peut suffire dans certains cas mais l'avantage de la procédure est qu'elle pourra peut-être permettre de rendre le client indépendant du type de SGBD (i.e. : il a seulement besoin de connaître le nom de la procédure et les éventuels paramètres à lui passer).
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Dans ce cas, j'ai une autre piste : créer, sur le serveur, une procédure stockée permettant de récupérer son adresse MAC [1].
    Comment la mettre en place? Quelle syntaxe?

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par groovyroe
    Comment la mettre en place? Quelle syntaxe?
    Cela dépend du SGBD.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    Nous travaillons avec SQL Server 2000 (MSDE compris), et Oracle (de 7 à 10).

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par groovyroe
    Nous travaillons avec SQL Server 2000 (MSDE compris), et Oracle (de 7 à 10).
    Alors, direction http://www.developpez.net/forums/forumdisplay.php?f=42 et http://www.developpez.net/forums/forumdisplay.php?f=49
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    J'ai bien trouvé ca http://www.developpez.net/forums/sho...d.php?t=251507 , mais le pb reste le même, on ne peut recupérer que l'adresse mac des postes connectés...dommage que le champs netadress soit vide pour les process en background tel que "LOG WRITER"...sans parler des pb de droit sur la table master (Les Admin DB chez les clients sont souvent réticents à ce genre de chose...)

    Tjrs pas d'indices?

    Je viens de tester ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec xp_cmdshell 'ipconfig /all'
    Il serait possible de récuperer l'adresse MAC, mais question droits...la question ne se pose même plus...

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Je ne pensais pas tout à fait à cela.
    Les choses du genre 'xp_cmdshell' permettent de faire trop de choses.
    Je pensais plutôt à l'écriture d'une extension qui permettrait d'obtenir l'adresse MAC et rien d'autre.
    Par exemple, pour MS SQL Server, tu peux faire un tour à :
    - "Extended Stored Procedures Programmer's Reference" (pour anciennes versions de MS SQL Server) ;
    - "Database Engine .NET Framework Programming " ;
    - "Building Database Objects with Common Language Runtime (CLR) Integration" ;
    - "CLR Scalar-Valued Functions".
    Si tu arrives à construire une extension toute simple et que tu arrives à obtenir l'adresse MAC de la machine en .Net, tu auras tout le nécessaire.

    Le principe est le même avec les autres SGBD : cela doit exister pour Oracle, cela existe pour MySQL (on peut même, si ma mémoire est bonne, charger des extensions quand on en a besoin), etc.

    Avantages de cette technique : elle permet d'obtenir des informations qui ne seraient peut-être pas disponibles en utilisant les commandes/tables/vues "classiques" du SGBD ; elle permet de ne retourner que l'information nécessaire sans ouvrir un boulevard vers tout et n'importe quoi.
    Inconvénients : demande du travail (mais tu es payé, non ?) ; méthode dépendante du SGBD ET de l'OS ; nécessite d'être très bien testé avant mise en place chez le client.

    Bon courage.
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

Discussions similaires

  1. Réponses: 29
    Dernier message: 14/01/2013, 10h40
  2. tutoriel : La programmation de l'API Windows en C++ par Bob
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 19
    Dernier message: 21/06/2008, 14h34
  3. Réponses: 7
    Dernier message: 19/03/2008, 16h37
  4. API window et reseau
    Par groovyroe dans le forum Développement
    Réponses: 1
    Dernier message: 26/02/2007, 13h04
  5. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28

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