Всегда интересно исследовать мир вокруг нас - это еще веселее, когда вы исследуете мир с помощью видения специалиста по данным.
В этом анализе мы собираемся определить открытые сети 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 и шифрование безопасности. Это очень полезно для обнаружения и уведомления открытых сетей без защиты, которые могут быть атакованы злоумышленниками.
использованная литература
- В Dev: проложи свой путь к точке доступа с помощью wiglr
- Полный код использован здесь на моем гитхабе
- Официальный сайт WiGLE
Заключительные примечания: Если вы заинтересованы в участии в разработке программного обеспечения с открытым исходным кодом, Внесите вклад в этот пакет, чтобы успешно развернуть его на CRAN и получить доступ к широкому кругу пользователей