9
votes

Comment puis-je récupérer la force du signal des réseaux LAN sans fil proches sur Windows à l'aide de Python?

Comment puis-je récupérer la résistance du signal des réseaux LAN sans fil proches sur Windows à l'aide de Python?

Je voudrais montrer ou graphiquement les valeurs.


1 commentaires

Veuillez spécifier votre plate-forme (Windows, Linux, ...)


4 Réponses :


15
votes

Si vous êtes sur Windows , vous voulez probablement Utilisez l'API WLAN , qui fournit la fonction 'WLANGETAVAILABLEBABLABLEBENETWORKLIST ()' (voir le API Docs pour l'utilisation). Je ne suis pas au courant d'aucun emballage Python pour wlanapi.dll afin que vous puissiez devoir vous envelopper vous-même en utilisant CTTYPES . J'ai un script préliminaire qui le fait ( travaille pour moi ), mais cela peut être crufty. Vous voudrez lire la documentation pour comprendre la signification de tous les champs: xxx

sur linux , vous avez quelques choix: < p> Les options standard consistent à analyser la sortie de iwlist -Scan . Toutefois, si vous êtes actuellement connecté à un WLAN et non en tant que root, il ne renvoie que le WLAN actuellement connecté.

Si vous avez besoin de plus que cela, le meilleur moyen consiste à interroger le démon Wireless Manager. Sur moderne, Linuxes, c'est généralement NetworkManager , bien que wicd devient de plus en plus populaire. Ces deux gestionnaires peuvent être interrogés à l'aide de dbus . À moins que vous ne puissiez contrôler ce que les clients ont sur leurs systèmes, vous devrez peut-être prendre en charge ces deux options, ou au moins une option et avoir une baisse pour iwlist . .


1 commentaires

Il semble que cela met en cache et ne rafraîchit pas les valeurs. Pour obtenir des données actualisées, voir la réponse associée à partir de @Pedro G, et voir aussi social.msdn.microsoft.com/forums/security/en-us/...



0
votes

@fmark je voulais juste dire merci beaucoup pour ce post génial. À mon travail, j'ai essayé d'obtenir RSSI à partir de l'AP connecté sous Windows, et vous méritez de nombreux mercis pour moi de le faire enfin. Je répète actuellement tous les AP, mais je travaille à la modifier. Je voulais offrir une recommandation à votre code. Je ne suis pas très expérimenté avec C ou le module Python Ctypes, mais je pense avoir peut-être trouvé un bug possible. Je ne sais vraiment pas quelle différence cela fait, mais j'ai remarqué:

Vous définissez énums comme ceci: p> xxx pré>

mais d'autres fois que vous définissez quelque chose de très similaire comme celui-ci : P>

DOT11_PHY_TYPE = c_uint
(dot11_phy_type_unknown,
 dot11_phy_type_any,
 dot11_phy_type_fhss,
 dot11_phy_type_dsss,
 dot11_phy_type_irbaseband,
 dot11_phy_type_ofdm,
 dot11_phy_type_hrdsss,
 dot11_phy_type_erp,
 dot11_phy_type_ht,
 dot11_phy_type_IHV_start,
 dot11_phy_type_IHV_end) = map(DOT11_PHY_TYPE,
                               [0,0,1,2,3,4,
                                5,6,7,0x80000000,
                                0xffffffff])


1 commentaires

Merci! Mais quelqu'un a-t-il une version Python3 de cela?



1
votes

Alors .. Je me suis fondé sur le code @fmarks (qui était une personne en direct pour moi) et vous devez ajouter la fonction wlanscan, sinon les valeurs RSSI ne rafraîchiront pas .

Voici mon code étendu!

Tous les accessoires à @fmarks! xxx


1 commentaires

Merci! Qui correspond (et aide à résoudre) la conversation à Quand / Comment NetSH met-il à jour sa valeur de force de signal? et quelqu'un a une version PYTHON3?



7
votes

Si vous ne voulez pas traiter avec Windows API, vous pouvez utiliser la méthode indiquée Ici avec une légère modification.

Vous pouvez utiliser cette commande: p> xxx pré>

Utilisation de ce code P>

import subprocess
results = subprocess.check_output(["netsh", "wlan", "show", "network", "mode=Bssid"])


0 commentaires