Всегда интересно исследовать мир вокруг нас - это еще веселее, когда вы исследуете мир с помощью видения специалиста по данным.

В этом анализе мы собираемся определить открытые сети Wi-Fi вокруг нас и нанести их на интерактивную карту.

Инструментарий

  • wiglr R Пакет для взаимодействия с WiGLE API
  • WiGLE API для сбора данных
  • tidyverse Пакет R для анализа и обработки данных
  • leaflet R Пакет для рисования интерактивных карт (интерфейс к leaflet.js)

wiglr - это R-пакет, который (находится в стадии разработки) был разработан Бобом Рудисом под именем hrbrmstr. Он является одним из опытных пользователей R, который также активно участвует в разработке новых пакетов R и ведет блог о них.

Предпосылки

Прежде чем мы начнем кодирование (в любом случае, это всего лишь набор строк), нам нужно сделать две важные вещи.

Установите все необходимые пакеты R

wiglr еще не доступен в CRAN, поэтому должен быть установлен из Github / Gitlab в зависимости от ваших предпочтений. Ниже приведен код, как вы можете установить его из Github с помощью пакета devtools.

# install.packages('devtools') # install devtools if not available
devtools::install_github(“hrbrmstr/wiglr”)

Другие упомянутые выше служебные пакеты:

install.packages('tidyverse') # ideally dplyr is what we'd need
install.packages('leaflet') 

Получение токена WiGLE API

  • Создайте аккаунт на wigle.net
  • После входа в систему получите свой токен API на странице вашей учетной записи (нажав Показать токен).
  • Откройте RStudio и установите свой («Закодированный для использования») токен API в качестве переменной среды следующим образом:
Sys.setenv(WIGLE_API_KEY = "here_goes_my_encoded_token")

Итак, мы выполнили все необходимые условия и готовы к взлету!

Снять

Загрузка библиотек

Как и в случае с любым другим проектом R, первым шагом является загрузка всех необходимых библиотек.

library(wiglr)
library(tidyverse)
library(leaflet)

Общая статистика мест вокруг нас

На этом этапе мы зададим ограничивающую рамку (в виде широты и долготы) и извлечем детали сетей Wi-Fi вокруг нас.

# This is for Bengaluru, India - change it according to where you're
wifi_box <- wigle_bbox_search(12.7585, 13.1105, 77.5477, 77.8431) 

Пример вывода

> wifi_box
$success
[1] TRUE
$totalResults
[1] 252098
$search_after
[1] 552772
$first
[1] 1
$last
[1] 100
$resultCount
[1] 100
$results
# A tibble: 100 x 25
   trilat trilong ssid    qos transid channel firsttime lasttime lastupdt housenumber
 *  <dbl>   <dbl> <chr> <int> <chr>     <int> <chr>     <chr>    <chr>    <chr>      
 1   12.9    77.6 oakd…     0 201701…       6 2017-01-… 2017-01… 2017-01… 305, 1st M…
 2   12.9    77.6 Sham…     0 201606…      11 2001-01-… 2016-06… 2016-06… ""         
 3   13.0    77.7 PPAN…     0 201303…       1 2013-03-… 2013-03… 2013-03… ""

Это просто список (результат ответа JSON) с фактическим результатом и некоторыми метаданными. Как вы можете видеть в приведенном выше примере выходных данных, нашей основной областью будет results.

Морское путешествие

На этом пора нарисовать интерактивную карту, которую мы обещали нарисовать (в начале этой статьи).

Ниже приведен код, в котором мы берем results из wifi_box и создаем новую переменную labs (которая будет использоваться в следующих строках для всплывающих ярлыков). Эти данные затем передаются в leaflet() для создания карты, где мы добавляем базовый слой, а затем добавляем маркеры круга с заданными долготой и широтой.

Цветовая кодировка предназначена для обозначения уровня безопасности сети Wi-Fi: нет (нет безопасности) - красный, неизвестно - желтый и все остальное (например, WEP, WPA) - Синий.

wifi_box$results %>% 
  mutate(labs = sprintf("SSID: <code>%s</code><br/>Encryption: %s", ssid, encryption)) %>% 
  leaflet() %>% 
  #addTiles() %>% 
  addProviderTiles(providers$Stamen.Toner) %>% 
  #addProviderTiles(providers$OpenStreetMap, options = providerTileOptions(opacity = 0.4)) %>% 
  addCircleMarkers(~trilong, ~trilat, 
                   radius = 10, 
                   popup = ~labs, 
                   color = ifelse(
                     wifi_box$results$encryption == "none","red",
                                  ifelse(
                                    wifi_box$results$encryption == "unknown",
                                    "yellow","blue")))

Это дает нам красивый сюжет (который является интерактивным по своей природе, когда вы строите в своем RStudio).

Вы можете поиграть с разными значениями names(providers), чтобы выбрать предпочтительную тему базового слоя / карты.

Безопасная посадка

Благодаря этому мы успешно построили сети Wi-Fi вокруг нас, а также их SSID и шифрование безопасности. Это очень полезно для обнаружения и уведомления открытых сетей без защиты, которые могут быть атакованы злоумышленниками.

использованная литература

Заключительные примечания: Если вы заинтересованы в участии в разработке программного обеспечения с открытым исходным кодом, Внесите вклад в этот пакет, чтобы успешно развернуть его на CRAN и получить доступ к широкому кругу пользователей