Condividi tramite



Luglio 2016

Volume 31 Numero 7

Il presente articolo è stato tradotto automaticamente.

Applicazioni moderne - Creare un Wi-Fi Scanner in UWP

Da Frank La La

Wi-Fi dispone per gli ultimi dieci anni o meno diventano molto diffusa. Molti negozi e caffè offerta gratuita Wi-Fi a clienti. Quasi tutti gli alberghi offrono qualche Internet wireless per i guest. La maggior parte di noi hanno reti wireless a casa. Connettori Ethernet dispone di alcuni Tablet e dispositivi mobili, Wi-Fi è parte integrante della nostra vita moderno. Tuttavia, è raramente assegnargli curare ogni minimo particolare.

Pertanto, domande desiderato. Per quanto riguarda il volume di reti Wi-Fi intorno a noi? Quanti sono presenti? Vengono protette? I canali sono in? Che cos'è denominati? È possibile mapparle? Ciò che è possibile apprendere dai metadati rete Wi-Fi?

Durante l'esame my cani recente, è successo al riepilogo nella schermata connessione di rete Wi-Fi del telefono e notare alcuni nomi di rete dinamica, in gamba. Ciò mi chiedersi come molti altri scelto di essere comical e pratico. Quindi, ho avuto l'idea di delineare e analizzare le reti wireless nella mia intorno e. Se è possibile automatizzare il processo, ho potrei anche analisi e mapping delle reti wireless durante la mia dal luogo di lavoro per lavorare. In teoria, ho potuto un programma in esecuzione su un Raspberry Pi periodicamente analisi in modalità wireless e registrare i dati a un servizio Web. Certamente sarebbe più pratica uno sguardo al cellulare in modo intermittente.

Ebbene, la piattaforma di Windows universale (UWP) fornisce un accesso completo ai dati di rete wireless tramite le classi nello spazio dei nomi Windows.Devices.WiFi. Come sapete, un'app UWP eseguibili non solo su telefoni cellulari e PC, ma su Raspberry Pi 2 in esecuzione Windows 10 IoT Core. A questo punto, ho avuto tutti che necessari per compilare il progetto.

In questo articolo verranno affrontate le nozioni di base di analisi reti Wi-Fi utilizzando le API integrate nella piattaforma UWP.

Spazio dei nomi Windows.Devices.WiFi

Le classi nello spazio dei nomi Windows.Devices.WiFi contengono tutto il necessario per analizzare ed esplorare schede di rete wireless e reti wireless nell'intervallo. Dopo aver creato un nuovo progetto UWP in Visual Studio, aggiungere una nuova classe denominata WifiScanner e la proprietà seguente:

public WiFiAdapter WiFiAdapter { get; private set; }

Poiché è possibile disporre di più schede Wi-Fi in un dato sistema, è necessario selezionare la scheda Wi-Fi che si desidera utilizzare. Il metodo InitializeFirstAdapter Ottiene il primo enumerato nel sistema, come illustrato nella Figura 1.

Figura 1 trovare la prima scheda Wi-Fi connessi al sistema e inizializzarla

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.");
    }
  }
}

Aggiungendo la funzionalità Wi-Fi

È possibile notare che vi sia un controllo per l'accesso con Wi-Fi e che il codice genera un'eccezione se il metodo RequestAccessAsync restituisce false. Questo avviene perché l'applicazione deve disporre di una funzionalità del dispositivo per consentirne l'analisi e connettersi a reti Wi-Fi. Questa funzionalità non è elencata nella scheda funzionalità nell'editor delle proprietà del manifesto. Per aggiungere questa funzionalità, fare clic sul file Package.appxmanager e scegliere Visualizza codice.

Si vedrà ora il XML non elaborato del file Package.appxmanager. Nel nodo funzionalità, aggiungere il codice seguente:

<DeviceCapability Name="wifiControl" />

Salvare il file. L'applicazione include l'autorizzazione per accedere alle API di Wi-Fi.

Esplorazione delle reti Wireless

Con il codice per identificare un adapter Wi-Fi per l'utilizzo con e l'autorizzazione per l'accesso, il passaggio successivo consiste nella ricerca effettivamente delle reti. Fortunatamente, il codice per eseguire questa operazione è piuttosto semplice. è semplicemente una chiamata al metodo ScanAsync sull'oggetto WifiAdapter. Aggiungere il metodo seguente alla classe WifiScanner:

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

Una volta compilato ScanAsync esecuzioni, la proprietà NetworkReport di WifiAdapter. NetworkReport è un'istanza di WiFiNetworkReport, che contiene AvailableNetworks, un elenco < WiFiAvailableNetwork >. L'oggetto WiFiAvailableNework contiene numerosi punti dati su una rete specifica. È possibile trovare l'identificatore SSID (Service Set), potenza del segnale, accesso e metodo di crittografia punto tempi di attività, tra gli altri punti dati, senza la connessione alla rete.

Scorrere le reti disponibili è piuttosto semplice: Creare un CLR oggetti POCO (Plain Old) per contenere alcuni dei dati da oggetti WiFiAvailableNetwork, come illustrato nel codice seguente:

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()
  };
}

Creazione dell'interfaccia utente

Anche se desidera che l'applicazione venga eseguita senza un'interfaccia utente nel progetto finale, è utile per lo sviluppo e risoluzione dei problemi per visualizzare le reti all'interno di intervalli e i metadati associati. È inoltre utile per gli sviluppatori che potrebbero non avere un Raspberry Pi al momento, ma continuare a seguire la procedura. Come illustrato nella Figura 2, il codice XAML per il progetto è semplice ed è presente una casella di testo su più righe per archiviare l'output dell'analisi.

Figura 2, il codice XAML per l'interfaccia utente

<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>

Acquisizione dei dati di posizione

Per fornire valore aggiunto, ogni analisi della rete wireless notare inoltre il percorso dell'analisi. Questo modo è possibile fornire informazioni interessanti e le visualizzazioni di dati in un secondo momento. Fortunatamente, l'aggiunta del percorso per App UWP è semplice. È necessario, tuttavia aggiungere la funzionalità percorso all'app. È possibile farlo facendo doppio clic sul file package. appxmanifest in Esplora soluzioni, facendo clic sulla scheda funzionalità e la posizione della casella di controllo nell'elenco di funzionalità.

Il codice seguente recupera il percorso utilizzando le API incorporate il UWP:

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

Ora che si dispone di un percorso, si desidera archiviare i dati del percorso. Di seguito è la classe WiFiPointData, che archivia dati sulla località insieme alle informazioni sulle reti nella posizione:

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>();
  }
}

A questo punto, è importante notare che, a meno che il dispositivo dispone di un dispositivo GPS, l'applicazione richiede una connessione Wi-Fi a Internet per risolvere il percorso. Senza un sensore GPS onboard, sarà necessario mobile sensibili e assicurarsi che il computer portatile o Raspberry Pi 2 è connesso a esso. Questo significa anche che il percorso restituito sarà meno accurato. Per ulteriori informazioni sulle procedure consigliate per la creazione UWP con riconoscimento della posizione, consultare l'articolo "Linee guida per Location-Aware App," Windows Dev Center in bit.ly/1P0St0C.

L'analisi più volte

Per uno scenario di analisi-e-mapping-while-determinano l'app deve periodicamente a cercare reti Wi-Fi. A tale scopo, è necessario utilizzare un DispatchTimer a cercare reti Wi-Fi a intervalli regolari. Se non avete familiarità con il funzionamento DispatchTimer, consultare la documentazione all'indirizzo bit.ly/1WPMFcp.

È importante notare che un'analisi Wi-Fi può richiedere alcuni secondi, a seconda del sistema. Il codice seguente imposta un DispatchTimer di generare un evento ogni 10 secondi, più che sufficiente tempo per anche il sistema più lento.

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

Ogni 10 secondi, il timer verrà eseguito il codice nel metodo Timer_Tick. Il codice seguente cerca reti Wi-Fi e quindi i risultati vengono aggiunti alla casella di testo nell'interfaccia utente:

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

Risultati analisi

Come accennato in precedenza, una volta che viene chiamato il metodo ScanAsync, i risultati dell'analisi vengono archiviati in un elenco < WiFiAvailableNetwork >. Tutto ciò che serve per ottenere questi risultati è per scorrere l'elenco. Il codice in Figura 3 fatto e inserisce i risultati in un'istanza della classe WiFiPointData.

Figura 3 codice per scorrere tutte le reti trovate durante un'analisi

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);
  }

Per semplificare l'interfaccia utente pur fornendo per l'analisi di dati complessi, è possibile convertire il WiFiPointData in un formato CSV (Comma Separated Value) e impostare il testo della casella di testo nell'interfaccia utente. CSV è un formato relativamente semplice che può essere importato in Excel e Power BI per l'analisi. Viene riportato il codice per convertire WiFiPointData in Figura 4.

Figura 4 conversione 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;
}

Visualizzazione dei dati

Naturalmente, non attendere prima di configurare il servizio cloud per visualizzare e visualizzare i dati. Di conseguenza, sono stato CSV dati generati dall'applicazione e copiati e incollati che in un file di testo. Apportate quindi assicurarsi di salvare il file con un. Estensione CSV. Successivamente, importato i dati in Power BI Desktop. Power BI Desktop è un download gratuito da powerbi.microsoft.com che consente di visualizzare ed esplorare i dati.

Per importare i dati dall'app, fare clic su Recupera dati nella schermata iniziale di Power Bi Desktop.

Nella schermata seguente, scegliere CSV e quindi fare clic su Connetti. Nella finestra di dialogo di selezione del file, scegliere il file CSV con i dati copiati e incollati all'esterno dell'app.

Una volta che viene caricato, vedrai un elenco di campi sul lato destro dello schermo. Mentre un'esercitazione completa in Power BI Desktop esula dall'ambito di questo articolo, non richiede più competenze per produrre una visualizzazione che mostra la posizione delle reti Wi-Fi, il SSID e i protocolli di crittografia che essi utilizzano, come illustrato nella Figura 5.

Raccolte di Power BI visualizzazione dei dati dell'App Scanner Wi-Fi
Figura 5 Power BI visualizzazione dei dati dell'App Scanner Wi-Fi raccolti

Sorprendentemente, circa un terzo delle reti sono completamente crittografati. Anche se alcune di queste sono le reti guest impostare diverse aziende, altri non lo sono.

Applicazioni pratiche

Mentre l'intento originale era semplicemente per misurare l'esperienza tecnica e wit di my adiacenti, questo progetto contiene alcune applicazioni pratiche piuttosto interessante. La possibilità di facilmente e automaticamente mappare posizione e la potenza del segnale Wi-Fi con applicazioni interessanti. Che cosa potrebbe una città? se bus ogni città sono stati dotata di un dispositivo IoT con questa applicazione in esecuzione su di esso Città Impossibile misurare la prevalenza di reti Wi-Fi e correlare i dati con dati sul reddito risorse. Gli esponenti politici potrebbero quindi decisioni informate criteri basati sui dati. Se una community fornisce Wi-Fi pubblico nella stessa città o in determinate aree, la potenza del segnale può essere misurata in tempo reale senza costi aggiuntivi di invio tecnici intorno. Città potrebbero anche determinare dove reti non protette sono più comuni e creare i programmi di riconoscimento di destinazione per aumentare la sicurezza informatica della community.

Su scala ridotta, la possibilità di analizzare rapidamente i metadati di rete Wi-Fi si rivela utile quando si configura la propria rete. Molti router offrono agli utenti la possibilità di modificare il canale in cui vengono trasmessi. Un ottimo esempio di questo oggetto è un'applicazione denominata "Wi-Fi Analyzer" (bit.ly/25ovZ0Q), che, tra le altre cose, consente di visualizzare il livello e la frequenza delle reti senza fili nelle vicinanze. Ciò si rivela utile quando si configura una rete Wi-Fi in una nuova posizione.

Avvolgendo

Copiando e incollando dati di testo nell'interfaccia utente non verrà ridimensionata. Inoltre, se l'obiettivo è l'applicazione venga eseguita in un dispositivo IoT senza alcun tipo di visualizzazione, quindi l'applicazione deve inviare dati al cloud senza interfaccia utente. Nel mio del mese prossimo, verrà illustrato come configurare un servizio cloud per sfruttare tutti i dati. Inoltre, verrà illustrato come distribuire la soluzione in esecuzione Windows IoT Core Raspberry Pi 2.


Frank La Vigne è un evangelist di tecnologia del team Microsoft Technology e l'interesse verso civico, in cui aiuta gli utenti utilizzano la tecnologia per creare una community migliorata.  Possiede un blog all'indirizzo FranksWorld.com e ha un YouTube canale TV al mondo chiamato Marco (youtube.com/FranksWorldTV).

Grazie ai seguenti esperti tecnici per la revisione di questo articolo: Rachel Appel, Robert Bernstein e modalità Jose Luis