Comment puis-je obtenir les APs wifi disponibles et leur puissance de signal in.net Je ne sais pas.
est-il possible d'accéder à tous les points D'accès WiFi et à leurs valeurs RSSI respectives en utilisant .NET? Ce serait vraiment bien si je pouvais le faire sans utiliser de code non géré ou encore mieux si cela fonctionnait en mono aussi bien que .NET.
si c'est possible, j'appricierais un échantillon de code. Merci
voici quelques questions similaires que j'ai trouvées:
- Obtenir le SSID du sans fil réseau auquel je suis connecté avec C# .Net sur Windows Vista
- la Gestion de la connexion réseau sans fil en C#
- Obtenir BSSID (adresse MAC) du point d'accès sans fil à partir de C#
5 réponses
c'est un projet d'enrubannage avec du code géré en c# à http://www.codeplex.com/managedwifi
il prend en charge Windows Vista et XP SP2 (ou une version plus récente).
code échantillon:
using NativeWifi;
using System;
using System.Text;
namespace WifiExample
{
class Program
{
/// <summary>
/// Converts a 802.11 SSID to a string.
/// </summary>
static string GetStringForSSID(Wlan.Dot11Ssid ssid)
{
return Encoding.ASCII.GetString( ssid.SSID, 0, (int) ssid.SSIDLength );
}
static void Main( string[] args )
{
WlanClient client = new WlanClient();
foreach ( WlanClient.WlanInterface wlanIface in client.Interfaces )
{
// Lists all networks with WEP security
Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList( 0 );
foreach ( Wlan.WlanAvailableNetwork network in networks )
{
if ( network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.WEP )
{
Console.WriteLine( "Found WEP network with SSID {0}.", GetStringForSSID(network.dot11Ssid));
}
}
// Retrieves XML configurations of existing profiles.
// This can assist you in constructing your own XML configuration
// (that is, it will give you an example to follow).
foreach ( Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles() )
{
string name = profileInfo.profileName; // this is typically the network's SSID
string xml = wlanIface.GetProfileXml( profileInfo.profileName );
}
// Connects to a known network with WEP security
string profileName = "Cheesecake"; // this is also the SSID
string mac = "52544131303235572D454137443638";
string key = "hello";
string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><MSM><security><authEncryption><authentication>open</authentication><encryption>WEP</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>networkKey</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey><keyIndex>0</keyIndex></security></MSM></WLANProfile>", profileName, mac, key);
wlanIface.SetProfile( Wlan.WlanProfileFlags.AllUser, profileXml, true );
wlanIface.Connect( Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName );
}
}
}
}
utilise des API Wifi natives, présentes sur tous les systèmes Vista et XP SP3. XP SP2 a une API différente avec laquelle vous pouvez faire la même chose.
vous pourrait être en mesure de le réaliser en utilisant des requêtes WMI. Jetez un oeil à ce thread .
si vous utilisez vista wmi ne fonctionne pas avec tous les adaptateurs réseau, une autre alternative pour vista est d'utiliser la commande netsh. Jetez un oeil à cet article de coprojet.
j'ai trouvé un autre moyen de le faire, bien que cela coûte de l'argent.
il y a un .NET lib disponible à rawether.net qui vous permet d'accéder aux pilotes ethernet.