Juillet 2016

Volume 31, numéro 7

Cet article a fait l'objet d'une traduction automatique.

Applications modernes - Conception d’un scanner Wi-Fi dans la plateforme Windows universelle

Par Frank La La

Wi-Fi a sur les dix dernières années ou deux deviennent omniprésents. Plusieurs magasins et les cafés offrent Wi-Fi gratuit aux clients pour leur faciliter la tâche. Pratiquement tous les hôtels offrent quelconque d’Internet sans fil pour les invités. La plupart d'entre nous ont des réseaux sans fil à domicile. Comme certains tablettes et les périphériques mobiles disposent prises Ethernet, Wi-Fi a deviennent partie intégrante de nos vies modernes. En outre, nous avons rarement lui bien pensée.

Par conséquent, les questions sont nombreux. Qu’en est-il du volume élevé de réseaux Wi-Fi autour de nous ? Combien existe-t-il ? Sont-elles sécurisées ? Le canaux qu’ils sont sur ? Qu’ils sont nommés ? Pouvons-nous nous les mapper ? Ce que nous savons à partir des métadonnées de réseau Wi-Fi ?

En marchant mon chiens récemment, j’est-il arrivé à l’écran de connexion de réseau Wi-Fi de mon téléphone coup de œil et remarqué certains noms de réseau beau. J’ai pour vous demander comment beaucoup d’autres avait choisi pour être comical et pratique. Ensuite, j’ai eu l’idée à exécuter et analyser les réseaux sans fil en ce qui concerne mon voisinage. Si j’aurais pu automatiser le processus, je pourrais même analyse et mapper les réseaux sans fil pendant mon domicile-travail fonctionne. Dans l’idéal, je pourrais en avoir un programme en cours d’exécution sur un Raspberry Pi qui serait régulièrement analyser sans fil et enregistrer ces données à un service Web. Il s’agit certainement plus pratique qu’oeil sur mon téléphone par intermittence.

En fait, la plate-forme de Windows universelle (UWP) fournit un accès complet au réseau sans fil via des classes dans l’espace de noms Windows.Devices.WiFi. Comme vous le savez, une UWP application peut s’exécuter sur les téléphones et ordinateurs portables, mais sur Raspberry Pi 2 Windows 10 IoT principal en cours d’exécution. À présent, j’ai dû il que me suffisait de créer mon projet.

Dans cet article, je vais aborder les principes fondamentaux de l’analyse des réseaux Wi-Fi à l’aide de l’API directement intégrés à la série UWP.

Windows.Devices.WiFi Namespace

Les classes dans l’espace de noms Windows.Devices.WiFi contiennent tous les éléments nécessaires pour analyser et explorez les cartes sans fil et les réseaux sans fil à portée. Après avoir créé un nouveau projet UWP dans Visual Studio, ajoutez une nouvelle classe appelée WifiScanner et ajoutez la propriété suivante :

public WiFiAdapter WiFiAdapter { get; private set; }

Puisqu’il est possible d’avoir plusieurs cartes Wi-Fi sur un système donné, vous devez choisir la carte Wi-Fi que vous souhaitez utiliser. La méthode InitializeFirstAdapter Obtient l’énumérés dans le système, comme indiqué dans Figure 1.

Figure 1 trouver la première carte Wi-Fi connecté au système et l’initialiser

private async Task InitializeFirstAdapter()
{
  var access = await WiFiAdapter.RequestAccessAsync();
  if (access != WiFiAccessStatus.Allowed)
  {
    throw new Exception("WiFiAccessStatus not allowed");
  }
  else
  {
    var wifiAdapterResults =
      await DeviceInformation.FindAllAsync(WiFiAdapter.GetDeviceSelector());
  if (wifiAdapterResults.Count >= 1)
    {
      this.WiFiAdapter =
        await WiFiAdapter.FromIdAsync(wifiAdapterResults[0].Id);
    }
    else
    {
      throw new Exception("WiFi Adapter not found.");
    }
  }
}

Ajouter la fonction Wi-Fi

Vous pouvez remarquer qu’il existe une vérification de l’accès au Wi-Fi et que le code lève une exception si la méthode RequestAccessAsync retourne false. Il s’agit, car l’application doit avoir une fonctionnalité de l’appareil pour vous permettre de rechercher et se connecter à des réseaux Wi-Fi. Cette fonctionnalité n’est pas répertoriée dans l’onglet fonctionnalités dans l’éditeur de propriétés de manifeste. Pour ajouter cette fonctionnalité, avec le bouton droit sur le fichier Package.appxmanager et choisissez Afficher le Code.

Vous voyez le code XML brut du fichier Package.appxmanager. À l’intérieur du nœud fonctionnalités, ajoutez le code suivant :

<DeviceCapability Name="wifiControl" />

Maintenant enregistrer le fichier. Votre application dispose maintenant d’autorisations pour accéder aux API Wi-Fi.

Exploration des réseaux sans fil

Avec le code pour identifier une carte Wi-Fi pour travailler avec et l’autorisation d’y accéder, l’étape suivante consiste à analyser en fait des réseaux. Heureusement, le code qui est assez simple ; Il est simplement un appel à la méthode ScanAsync sur l’objet WifiAdapter. Ajoutez la méthode suivante à la classe WifiScanner :

public async Task ScanForNetworks()
{
  if (this.WiFiAdapter != null)
  {
    await this.WiFiAdapter.ScanAsync();
  }
  }

Une fois ScanAsync s’exécute, la propriété NetworkReport de la WifiAdapter est renseigné. NetworkReport est une instance de WiFiNetworkReport, qui contient AvailableNetworks, une liste < WiFiAvailableNetwork >. L’objet WiFiAvailableNework contient de nombreux points de données sur un réseau donné. Vous pouvez trouver l’identificateur SSID (Service Set), force du signal, accès et méthode de chiffrement du point de disponibilité, parmi les autres points de données, tout cela sans connexion au réseau.

Il est très facile d’itération sur les réseaux disponibles : Vous créez un CLR objet POCO (Plain Old) pour contenir les données à partir des objets WiFiAvailableNetwork, comme illustré dans le code suivant :

foreach (var availableNetwork in report.AvailableNetworks)
{
  WiFiSignal wifiSignal = new WiFiSignal()
  {
    MacAddress = availableNetwork.Bssid,
    Ssid = availableNetwork.Ssid,
    SignalBars = availableNetwork.SignalBars,
    ChannelCenterFrequencyInKilohertz =
      availableNetwork.ChannelCenterFrequencyInKilohertz,
    NetworkKind = availableNetwork.NetworkKind.ToString(),
    PhysicalKind = availableNetwork.PhyKind.ToString()
  };
}

Création de l’interface utilisateur

Alors que j’ai l’intention de l’application s’exécute sans interface utilisateur dans le projet final, il est utile pour le développement et la résolution des problèmes pour afficher les réseaux au sein de la plage et les métadonnées associées. Il est également utile pour les développeurs qui peuvent pas avoir un Raspberry Pi pour le moment, mais souhaitez suivre. Comme indiqué dans Figure 2, le code XAML pour le projet est simple et il existe une zone de texte multiligne pour stocker la sortie de l’analyse.

Figure 2 le XAML pour l’interface utilisateur

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
  <Grid.RowDefinitions>
    <RowDefinition Height="60"/>
      <RowDefinition Height="60"/>
      <RowDefinition Height="*"/>
  </Grid.RowDefinitions>
  <TextBlock FontSize="36" Grid.RowSpan="2" >WiFi Scanner</TextBlock>
  <StackPanel Name="spButtons" Grid.Row="1" Orientation="Horizontal">
    <Button Name="btnScan" Click="btnScan_Click" Grid.Row="1">Scan For
      Networks</Button>
  </StackPanel>
  <TextBox Name="txbReport" TextWrapping="Wrap" AcceptsReturn="True"
    Grid.Row="2"></TextBox>
  </Grid>
</Page>

Capture des données d’emplacement

Afin de fournir une valeur supplémentaire, chaque analyse du réseau sans fil Notez également l’emplacement de l’analyse. Il est ainsi possible de fournir intéressantes et des visualisations de données ultérieurement. Heureusement, l’ajout d’emplacement pour les applications UWP est simple. Toutefois, vous devez ajouter la fonctionnalité d’emplacement à votre application. Que faire en double-cliquant sur le fichier Package.appxmanifest dans l’Explorateur de solutions, en cliquant sur l’onglet fonctionnalités et en vérifiant la case à cocher de l’emplacement dans la liste des fonctionnalités.

Le code suivant récupère l’emplacement en utilisant les API intégrées de la série UWP :

Geolocator geolocator = new Geolocator();
Geoposition position = await geolocator.GetGeopositionAsync();

Maintenant que vous disposez d’un emplacement, vous aurez que stocker les données d’emplacement. Voici la classe WiFiPointData, qui stocke les données d’emplacement, ainsi que des informations sur les réseaux à l’emplacement :

public class WiFiPointData
{
  public DateTimeOffset TimeStamp { get; set; }
  public double Latitude { get; set; }
  public double Longitude { get; set; }
  public double Accuracy { get; set; }
  public List<WiFiSignal> WiFiSignals { get; set; }
  public WiFiPointData()
  {
    this.WiFiSignals = new List<WiFiSignal>();
  }
}

À ce stade, il est important de noter que, sauf si votre appareil dispose d’un périphérique GPS, puis l’application requiert une connexion Wi-Fi à Internet afin de résoudre l’emplacement. Sans un capteur GPS intégré, vous devrez disposer d’un point d’accès mobile et vous assurer que votre ordinateur portable ou votre Raspberry Pi 2 est connecté. Cela signifie également que l’emplacement signalé seront moins précise. Pour plus d’informations sur les meilleures pratiques pour la création UWP sensible à l’emplacement, reportez-vous à l’article du centre de développement Windows, « Instructions de géolocalisation, » à bit.ly/1P0St0C.

Analyse de façon répétée

Pour un scénario d’analyse-et-mappage-while-commande, l’application doit rechercher régulièrement les réseaux Wi-Fi. Pour ce faire, vous devez utiliser un DispatchTimer pour rechercher des réseaux Wi-Fi à intervalles réguliers. Si vous n’êtes pas familiarisé avec le fonctionnement DispatchTimer, reportez-vous à la documentation relative à bit.ly/1WPMFcp.

Il est important de noter qu’une analyse Wi-Fi peut prendre plusieurs secondes, selon votre système. Le code suivant définit un DispatchTimer pour déclencher un événement toutes les 10 secondes, plus de suffisamment de temps à même le système les plus lentes :

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 10);
timer.Tick += Timer_Tick;
timer.Start();

Toutes les 10 secondes, la minuterie exécutera le code dans la méthode Timer_Tick. Le code suivant recherche les réseaux Wi-Fi, puis ajoute les résultats dans la zone de texte dans l’interface utilisateur :

private async void Timer_Tick(object sender, object e)
{
  StringBuilder networkInfo = await RunWifiScan();
  this.txbReport.Text = this.txbReport.Text + networkInfo.ToString();
}

Analyse des résultats de rapport

Comme mentionné précédemment, une fois que la méthode ScanAsync est appelée, les résultats de l’analyse sont stockés dans une liste < WiFiAvailableNetwork >. Il suffit pour accéder à ces résultats consiste à effectuer une itération dans la liste. Le code dans Figure 3 simplement et place les résultats dans une instance de la classe WiFiPointData.

Figure 3 Code pour itérer sur tous les réseaux détectés pendant l’analyse

foreach (var availableNetwork in report.AvailableNetworks)
{
  WiFiSignal wifiSignal = new WiFiSignal()
  {
    MacAddress = availableNetwork.Bssid,
    Ssid = availableNetwork.Ssid,
    SignalBars = availableNetwork.SignalBars,
    NetworkKind = availableNetwork.NetworkKind.ToString(),
    PhysicalKind = availableNetwork.PhyKind.ToString(),
    Encryption = availableNetwork.SecuritySettings.NetworkEncryptionType.ToString()
  };
  wifiPoint.WiFiSignals.Add(wifiSignal);
  }

Pour simplifier l’interface utilisateur tout en continuant à fournir pour l’analyse de données, vous pouvez convertir le WiFiPointData dans un format de valeurs séparées par des virgules (CSV) et définir le texte de la zone de texte dans l’interface utilisateur. CSV est un format relativement simple qui peut être importé dans Excel et Power BI pour l’analyse. Le code pour convertir WiFiPointData est indiqué dans Figure 4.

Figure 4 conversion WiFiPointData

private StringBuilder CreateCsvReport(WiFiPointData wifiPoint)
{
  StringBuilder networkInfo = new StringBuilder();
  networkInfo.AppendLine("MAC,SSID,SignalBars,Type,Lat,Long,Accuracy,Encryption");
  foreach (var wifiSignal in wifiPoint.WiFiSignals)
  {
    networkInfo.Append($"{wifiSignal.MacAddress},");
    networkInfo.Append($"{wifiSignal.Ssid},");
    networkInfo.Append($"{wifiSignal.SignalBars},");
    networkInfo.Append($"{wifiSignal.NetworkKind},");
    networkInfo.Append($"{wifiPoint.Latitude},");
    networkInfo.Append($"{wifiPoint.Longitude},");
    networkInfo.Append($"{wifiPoint.Accuracy},");
    networkInfo.Append($"{wifiSignal.Encryption}");
    networkInfo.AppendLine();
  }
  return networkInfo;
}

Visualisation des données

Naturellement, ne pouvais pas attendre avant de configurer mon service de cloud pour afficher et visualiser les données. En conséquence, j’ai pris le CSV données générées par l’application et copiées et collées que dans un fichier texte. J’ai ensuite fait, enregistrez le fichier avec un. Extension de volume partagé de cluster. Ensuite, j’ai importé les données dans Power BI Desktop. Power BI Desktop est un téléchargement gratuit à partir de powerbi.microsoft.com qui permet de facilement visualiser et Explorer les données.

Pour importer les données à partir de l’application, cliquez sur obtenir les données sur l’écran de démarrage de Power Bi Desktop.

Sur l’écran suivant, sélectionnez CSV et puis cliquez sur se connecter. Dans la boîte de dialogue Sélecteur de fichier, choisissez le fichier CSV avec les données copiées et collées en dehors de l’application.

Une fois que le chargement, vous verrez ensuite une liste de champs sur la partie droite de l’écran. Un didacticiel complet sur Power BI Desktop est abordée dans cet article, il ne faut pas beaucoup de compétences pour produire une visualisation qui affiche l’emplacement des réseaux Wi-Fi, leur SSID et les protocoles de cryptage qu’ils utilisent, comme indiqué dans Figure 5.

Power BI visualisation des données de l’application Analyseur de Wi-Fi collectées
Figure 5 Power BI visualisation des données de l’application Analyseur de Wi-Fi collectées

Étonnamment, environ un tiers de réseaux sont complètement non chiffrés. Alors que certains d'entre eux sont réseaux invité configurer différentes entreprises, certains ne sont pas.

Applications pratiques

Même si l’objectif original était simplement pour mesurer les compétences techniques et les wit de mes voisins, ce projet a des utilisations pratiques plutôt intéressantes. Permet de facilement et automatiquement mapper l’emplacement et la puissance du signal Wi-Fi a des applications intéressantes. Que peut faire une ville si chaque bus ville ont été comprend avec cette application s’exécute sur un appareil IoT ? Villes pourraient mesurer la récurrence des réseaux Wi-Fi et les mettre en corrélation avec les données de revenu de voisinage. Élus pourraient puis des décisions avisées de stratégie basés sur ces données. Si une Communauté fournit Wi-Fi public dans des villes ou dans certaines zones, la puissance du signal peut être mesuré en temps réel sans le coût supplémentaire de l’envoi de techniciens autour. Villes peuvent également déterminer où les réseaux non sécurisés ont été répandues et créer des programmes de sensibilisation ciblé pour renforcer la sécurité de cybersécurité de communauté.

Sur une plus petite échelle, la possibilité d’analyser rapidement les métadonnées du réseau Wi-Fi est pratique lorsque vous configurez votre propre réseau. Beaucoup de routeurs offre aux utilisateurs la possibilité de modifier le canal sur lequel ils de diffusion. Un parfait exemple est une application appelée « Wi-Fi Analyzer » (bit.ly/25ovZ0Q), qui, entre autres choses, affiche les la puissance et la fréquence des réseaux sans fil à proximité. Cette fonctionnalité est pratique lorsque vous configurez un réseau Wi-Fi dans un nouvel emplacement.

Synthèse

Copier et coller des données de texte à partir de l’interface utilisateur ne mettra pas à l’échelle. En outre, si l’objectif est à exécuter l’application sur un appareil IoT sans n’importe quel type d’affichage, l’application a besoin envoyer des données vers le nuage sans aucune interface utilisateur. Dans mon du mois prochain, vous allez apprendre à configurer un service cloud à prendre dans toutes ces données. En outre, vous allez apprendre à déployer la solution sur un Raspberry Pi 2 Windows IoT principal en cours d’exécution.


Frank La Vigne est un spécialiste de la technologie de l’équipe Microsoft Technology et Engagement postale, où il aide les utilisateurs à exploiter la technologie afin de créer une Communauté plus sûre.  Régulièrement à l’adresse FranksWorld.com et a un YouTube channel World TV de Frank appelé (youtube.com/FranksWorldTV).

Remercie les experts techniques suivants d'avoir relu cet article : Rachel Appel, Robert POLYNÔMES et Jose Luis manières