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 :

Développer une application capable lister des réseaux Wifi disponibles


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut Développer une application capable lister des réseaux Wifi disponibles
    Bonjour ! Nouveau sur ce forum

    Je dois développer une application sous WindowsXP capable de lister les réseaux wifi qu'un poste de travail peut capter. Je réalise cette appli en VisualBasic mais je peux bien sûr développer des petits modules en C ou Java à coté.

    Après de longues recherche, j'ai trouvé une solution du côté du système WMI (une sorte de base de données d'informations sur l'ordinateur), qui permet, via une certaine requête, d'obtenir cette fameuse liste de réseaux wifi disponibles.

    Mais premièrement cette solution est buggée : un bug windows ne permet pas de récupérer une liste correcte lorsque il y a plus de 1 réseau wifi disponible.
    Deuxièmement, le WMI n'est pas vraiment fait pour ça...

    Des collègues développeurs m'ont conseillé d'aller creuser du côté des API windows. Mais malgré mes recherches (MSDN, support microsoft, etc) impossible de trouver la moindre info sur une API me permettant de lister les réseaux wifi disponibles.

    En conclusion, quelqu'un aurait il de l'info sur une API windows permettant de lister les réseaux wifi ?
    (Si, en plus de lister, on peut également se connecter, ce serait top)

    Merci bcp de vos réponses

    Benoit

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par benoit colin
    Deuxièmement, le WMI n'est pas vraiment fait pour ça...
    Que le provider ne soit pas adapté à ton besoin peut être, qu'il soit buggé possible (mais d'après quel sources?) mais que WMI ne soit pas fait pour ça je pense pas.
    Désolé je ne connais pas suffisament les API pour te proposer une piste.
    Justement WMI permet de se concentrer sur l'information à récupérer et pas sur comment la récupérer

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    Merci Laurent pour tes réponses.
    Pour moi le WMI sur WinXP SP2 est buggé pour détecter le wifi car 1° Je le constate moi-même avec mes dévs, dès que j'ai plus de 1 réseau visible, mes requêtes WMI retournent des données qui ne veulent rien dire (et avec un WMI Explorer, ca fait pareil) et 2° J'ai trouvé deux trois cas comme moi (par exemple ici).
    Mais si tu penses que c'est "propre" de détecter les réseaux Wifi en WMI, je vais peux être persister dans cette voie...

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par benoit colin
    Mais si tu penses que c'est "propre" de détecter les réseaux Wifi en WMI, je vais peux être persister dans cette voie...
    WMI c'est une solution, ce ni mieux ni pire cela dépend des contraires qu'on a et des objectif à atteindre.
    De toutes façons les providers WMI utilisent des API

  5. #5
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par benoit colin
    Des collègues développeurs m'ont conseillé d'aller creuser du côté des API windows. Mais malgré mes recherches (MSDN, support microsoft, etc) impossible de trouver la moindre info sur une API me permettant de lister les réseaux wifi disponibles.

    En conclusion, quelqu'un aurait il de l'info sur une API windows permettant de lister les réseaux wifi ?
    (Si, en plus de lister, on peut également se connecter, ce serait top)

    Merci bcp de vos réponses

    Benoit
    Regarder autour de DeviceIoControl et CreateFile.
    Tout ce qui est matériel bas-niveau a déja été abordé


    Regarder cette exemple

    http://msdn.microsoft.com/library/de...ed_devices.asp

    Si j'ai un moment je regarderais
    Dernière modification par mat.M ; 09/05/2006 à 19h48.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    Merci Mat.M, je creuse la piste du DeviceIOControl.
    Il semble qu'un fichier d'exemple nommé wzctool.c fourni avec MS Development Platform donne de bonnes idées d'utilisation de ces fonctions. Mais je n'ai pas MS DP installé. Quelqu'un qui dispose de ce fichier pourrait-il me l'envoyer sur benoit.colin1 AT free.fr
    Merci

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Par défaut
    Bonjour tout le monde,

    J 'ai un petit problème a vous soumettre et comme ce post (qui commence à dater , je sais) correspond bien à mon problème je me permet de le faire ressurgir des profondeurs.

    J'ai besoin de récupérer les informations sur des points d'accés Wifi (BSSID,SSID,RSSI,WEP, DataRates, etc) et j'ai commencé a chercher vers la base WMI.
    Pour ce faire j'interroge la classe MSNdis_80211_BSSIList qui me renvoi le nombre d'instance en cours (nombre d'AP vu) et un tableau d'objet (MSNdis_80211_WLanBssId) contenant les données de chaque AP.
    Jusque là sur le papier tout va bien.

    Voici le code de la Sub qui me récupère les données :

    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
        Private Sub GetWifiInfo()
            ListView.Items.Clear()
    
            Dim query As String = "SELECT * FROM MSNDis_80211_BSSIList   WHERE Active='True'"
            Dim searcher As Management.ManagementObjectSearcher = New Management.ManagementObjectSearcher("root/WMI", query)
            Dim moc As Management.ManagementObjectCollection = searcher.Get()
            Dim moe As Management.ManagementObjectCollection.ManagementObjectEnumerator = moc.GetEnumerator()
            moe.MoveNext()
    
    
            Dim Ndis80211BSSIList() As Management.ManagementBaseObject = CType(moe.Current.Properties("Ndis80211BSSIList").Value, Management.ManagementBaseObject())
            Dim nbrAP As Integer = moe.Current.Properties("NumberOfItems").Value
            Dim i As Integer = 0
    
            ' *********     datas issues de Ndis80211BSSIList      *********
            Dim Config As Management.ManagementBaseObject ' donnée issue de Ndis80211BSSIList
            Dim ATIMWindow As String 'donnée issue de Config
            Dim BeaconPeriod As String 'donnée issue de Config
            Dim DSConfig As String 'donnée issue de Config
    
            Dim FHConfig As Management.ManagementBaseObject 'donnée issue de Config
            Dim DwellTime As String 'donnée issue de FHConfig
            Dim FHLenght As String 'donnée issue de FHConfig
            Dim HopPattern As String 'donnée issue de FHConfig
            Dim HopSet As String 'donnée issue de FHConfig
    
    
            Dim InfraMode As Management.ManagementBaseObject
            Dim NetInfra As String 'donnée issue de InfraMode
    
            Dim NetInUse As Management.ManagementBaseObject
            Dim NetworkType As String 'donnée issue de NetInUse
    
            Dim MacAdress() As Byte ' adresse Mac BSSID
            Dim Privacy As Boolean ' Open ou non
            Dim RSSI As String ' Niveau de signal
            Dim SSID() As Byte ' Nom de l'AP
            Dim SupportedRate() As Byte ' Vitesses suportées
            '*****************************************************
    
            For i = 0 To nbrAP - 1
                Dim AP As Management.ManagementBaseObject
                AP = Ndis80211BSSIList(i)
    
                Config = AP.Properties("Ndis80211Configuration").Value
                ATIMWindow = Config.Properties("ATIMWindow").Value
                BeaconPeriod = Config.Properties("BeaconPeriod").Value
                DSConfig = Config.Properties("DSConfig").Value
                FHConfig = Config.Properties("FHConfig").Value
                DwellTime = FHConfig.Properties("DwellTime").Value
                FHLenght = FHConfig.Properties("FHLength").Value
                HopPattern = FHConfig.Properties("HopPattern").Value
                HopSet = FHConfig.Properties("HopSet").Value
    
                InfraMode = AP.Properties("Ndis80211InfrastructureMode").Value
                NetInfra = InfraMode.Properties("Ndis80211NetworkInfrastructure").Value
    
                NetInUse = AP.Properties("Ndis80211NetworkTypeInUse").Value
                NetworkType = NetInUse.Properties("Ndis80211NetworkType").Value
    
                MacAdress = AP.Properties("Ndis80211MacAddress").Value
                Privacy = AP.Properties("Ndis80211Privacy").Value
                RSSI = AP.Properties("Ndis80211Rssi").Value
                SSID = AP.Properties("Ndis80211SsId").Value
                SupportedRate = AP.Properties("Ndis80211SupportedRate").Value
    
                Dim SSID_str As String = System.Text.Encoding.ASCII.GetString(SSID)
                Dim MacAdress_Str As String = ByteArray2HexaString(MacAdress)
                Dim SupportedRate_str As String = ByteArray2HexaString(SupportedRate)
                Dim NetInfra_str As String = GetNetInfraType(NetInfra) 'renvoi AdHoc, Infra, AUtoUnknow ou non référencé + la valeur
                Dim NetwokType_str As String = GetNetworkType(NetworkType) ' renvoi DS, FH , OFDM24, OFDM5 ou non référencé + la valeur
    
    
                Dim StringItem() As String = {SSID_str, MacAdress_Str, RSSI, NetInfra_str, NetwokType_str, Privacy, _
                SupportedRate_str, ATIMWindow, BeaconPeriod, DSConfig, DwellTime, FHLenght, HopPattern, HopSet}
                Dim LVI As New ListViewItem(StringItem)
    
                Me.ListView.Items.Add(LVI)
            Next
        End Sub
    J'ai fait les tests avec deux types de carte WIFI :

    - une carte PCI D-Link AirPlus XtremeG+ DWL-G520+ (TNET1130)
    - un clef USB ASUS WL-167G TR2500USB)

    Avec la carte PCI tout fonctionne à merveille (si si je vous assure )
    par contre avec la clef USB...
    J'ai exactement les mêmes symptômes que < benoit colin >
    Le premier 'Ndis80211BSSIList(0)' contient toujours les bonnes valeurs, par contre les suivantes sont toujours fausses


    J'ai vérifié les données dans la base WMI avec 'Window Management Instrumentation Tools' (WMI Object Brower)
    et je retrouve bien les mêmes valeurs (fausses aussi ).

    D'ou viens le problème ?
    - Hardware ? (carte PCI, USB WLAN ...)
    - ou software (Drivers)

    Franchement je séche et un début de piste serai le bienvenue .

    Je ne suis pas super a l'aise avec le C/C++, je tenterai bien le DeviceIOControl mais , pour bosser en C il me faut un bon exemple pour pouvoir suivre

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    Haa, je suis pas seul au monde ! Tu as exactement les même symptomes que moi

    Depuis le temps, j'ai conclu que le problème provient du driver wifi, lorsque il est requété par WMI !
    En effet sur certaines configs je récupére bien les toutes infos (avec le WMI explorer ou alors en vb.net ou vbs). Sur d'autres, il n'y a que la premiere entrée qui est bonne, le reste est complétement aléatoire. Enfin sur d'autres configs la classe MSNdis_80211_BSSIList n'existe carrément pas.

    Bien dommage tout ca. Je crois bien qu'il n'y a pas d'issue car le problème est à la source. (Peut-être installer un nouveau driver peut solutionner ? Je peux pas me le permettre sur les postes de l'entreprise)

    Je me suis tourné par désespoir vers la base de registre qui contient quelques infos mais impossible de trouver une régle fiable pour récupérer les infos wifi à tous les coups.

    Bon, si windows est capable de le faire, on doit bien être capable de le faire. Un bon code hardware en C peut être, mais il faut le temps...

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Par défaut
    Microsoft n'a malheureusement pas documenté l'API de la dll Wireless Zero Config" , je ne trouve pas grand chose dans cette direction, il y a bien une librairie managé pour Windows Mobile 5 (cf OpenNetCF.Net) mais j'ai besoin de faire tourner mon appli sous XP SP2 sur PC portable ou sur UMPC (donc plutôt orienté USB ou Mini PCI).

    Apparemment CACE technologie (AirPCap) à une solution complète(à base de clef USB) , il fournisse le soft (les sources sont dispo) le driver et la clef USB.

    J'ai déja compilé le code source et installé le driver mais je n'ai pour le moment trouvé aucune clef avec le même chipset qui veuille bien démarrer avec ce driver (je pense qu'ils ont du modifier le firmware de la clef)

    Le PID/VID de la clef attendu par le driver (information trouvé dans le fichier .INF) est de ce type PID_CACE/VID_0001 (CACE étant exactement le nom de la société , je ne pense pas que ce sois dù au hasard).

    Pour en revenir à XP, je pense qu'il s'appuie sur le service WZC pour fournir les informations sur les AP, je vais essayer de trouver le moyen de faire des P/invoke en important les fonctions de la/les DLL (wzcsapi.dll, wzcsvc.dll ou wzcdlg.dll).


    Si quelqu'un a des informations la dessus je suis preneur


    EDIT : Je viens de me rendre compte que Wlanapi.dll est enfin documenté sur MSDN surement depuis l'arrivée de VISTA

    Et la fonction WlanGetAvailableNetworkListhttp://msdn2.microsoft.com/en-us/library/ms706749.aspx à l'air de correspondre à mon besoin, je vais creuser.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/05/2014, 17h20
  2. Réponses: 53
    Dernier message: 28/08/2011, 18h15
  3. Réponses: 0
    Dernier message: 07/02/2010, 13h18
  4. Réponses: 1
    Dernier message: 16/03/2008, 10h00
  5. [D7] Développer une application avec des paquets
    Par aityahia dans le forum Delphi
    Réponses: 3
    Dernier message: 17/04/2007, 10h38

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