Как посмотреть данные сети на андроид
Wi-Fi и много других аббревиатур. Как в Android приложении получить данные об узлах Wi-Fi и не опухнуть
Однажды мне понадобилось сканировать из Android приложения сети Wi-Fi и получать подробную выкладку данных о точках доступа.
Тут пришлось столкнуться с несколькими трудностями: в офф.документации Android многие описанные классы стали deprecated (API level > 26), что никак не было в ней отражено; описание некоторых вещей в документации минимально (например поле capabilities класса ScanResult на момент написания не описано почти никак, хотя содержит много важных данных). Третья сложность может заключаться в том, что при первой близости с Wi-Fi, отличной от чтения теории и настройки роутера по localhost, приходится иметь дело с рядом аббревиатур, которые кажутся понятными по отдельности. Но может быть не очевидно, как их соотнести и структурировать (суждение субъективно и зависит от предыдущего опыта).
В данной статье рассмотрено как из Android кода получить исчерпывающие данные о Wi-Fi окружении без NDK, хаков, а лишь с помощью Android API и понять, как их интерпретировать.
Не будем тянуть и начнем писать код.
1. Создаем проект
Заметка рассчитана на тех, кто больше одного раза создавал Android проект, поэтому подробности данного пункта опускаем. Код ниже будет представлен на языке Kotlin, minSdkVersion=23.
2. Разрешения на доступы
Для работы с Wi-Fi из приложения понадобится получить от пользователя несколько разрешений. В соответствии с документацией, для того, чтобы осуществить сканирование сети на устройствах с ОС версий после 8.0, помимо доступа к просмотру состояния сетевого окружения нужен либо доступ на изменение состояния модуля Wi-Fi устройства, либо доступ к координатам (примерным или точным). Начиная с версии 9.0 необходимо запросить у пользователя и то и то, и при этом явно запросить у пользователя включить службу определения местоположения. Не забываем галантно объяснять пользователю, что это прихоть компании Google, а не наше желание устроить за ним слежку 🙂
Итого, в AndroidManifest.xml добавим:
А в коде, в котором есть ссылка на текущую Activity:
3. Создаем BroadcastReceiver и подписываемся на события обновления данных о сканировании сетевого окружения Wi-Fi
Метод WiFiManager.startScan в документации помечен как depricated с версии API 28, но офф. guide предлагает использовать его.
Итого, получили список объектов ScanResult.
4. Смотрим на ScanResult и разбираемся в терминах
Посмотрим на некоторые поля этого класса и опишем, что они означают:
SSID — Service Set Identifier – это название сети
BSSID – Basic Service Set Identifier – MAC адрес сетевого адаптера (Wi-Fi точки)
level — Received Signal Strength Indicator [dBm (русское дБм) — Децибел, опорная мощность 1 мВт.] — Показатель уровня принимаемого сигнала. Принимает значение от 0 до -100, чем дальше от 0, тем больше мощности сигнала потерялось по пути от Wi-Fi точки к вашему устройству. Подробнее можно посмотреть например на Википедии. Здесь же расскажу, что с помощью Android класса WifiManager можно проградуировать уровень сигнала по шкале от отличного до ужасного с выбранным вами шагом:
frequency — частота работы точки Wi-Fi [Гц]. Помимо самой частоты вас может заинтересовать так называемый канал. У каждой точки есть своя рабочая чистота. На момент написания текста наиболее популярным диапозоном Wi-Fi точек является 2.4 GHz. Но, если быть точнее, точка передает информацию на ваш телефон на пронумерованной частоте, близкой к названной. Количество каналов и значения соответствующих частот стандартизованы. Это сделано для того, чтобы точки поблизости работали на разных частотах, тем самым не создавая помехи друг другу и взаимно не понижая скорость и качество передачи. При этом точки работают не на одной частоте, а на диапазоне частот (пареметр channelWidth), называемом шириной канала. То есть точки, работающие на соседних (и не только на соседних, а даже на 3 от себя) каналах создают друг другу помехи. Вам может пригодится этот незамысловатый код, который позволяет вычислить номер канала по значению частоты для точек с частотой 2.4 и 5 Ghz:
capabilities — наиболее интересное поле для анализа, работа с которым потребовало много времени. Тут в строку записываются «возможности» точки. При этом подробности интерпритации строки в документации можно не искать. Вот несколько примеров того, что может лежать в этой строке:
5. Разбираемся в аббревиатурах и парсим capabilities
Стоит упомянуть, что классы пакета android.net.wifi.* использует под капотом linux-утилиту wpa_supplicant и результат вывода в поле capabilities является копией поля flags при сканировании.
Будем действовать последовательно. Рассмотрим сначала вывод такого формата, при котором внутри скобок элементы отделены знаком «-«:
Первое значение описывает т.н. метод аутентификации (authentication). То есть, какую последовательность действий должны произвести устройство и точка доступа, чтобы точка доступа позволила собой пользоваться и каким образом шифровать полезную нагрузку. На момент написания поста самые частые варианты это WPA и WPA2, при котором либо каждое подключаемое устройство напрямую, либо через т.н. RADIUS-сервер (WPA-Enterprice) предоставляет пароль по зашифрованному каналу. Скорее всего у вас дома точка доступа предоставляет подключение по этой схеме. Отличие второй версии от первой в болеее стойком шифре: AES против небезопасного TKIP. Также постепенно внедряется WPA3, более сложный и продвинутый. Теоритически может встретиться вариант с enterprice-решением CCKM (Cisco Centralized Key Managment), но мне так и не встретился.
Точка доступа могла быть настроена на аутентификацию по MAC-адресу. Или, если точка доступа предоставляет данные по устаревшему алгоритму WEP, то аутентификации фактически нет (секретный ключ тут и является ключом шифрования). Такие варианты отнесем к типу OTHER.
Ещё есть полюбившийся в общественных wi-fi метод со скрытым Captive Portal Detection — запрос аутентификации через браузер. Такие точки доступа выглядят для сканера как открытые (какими с точки зраения физического подключения и являются). Поэтому отнесем их к типу OPEN.
Второе значение можно обозначить как алгоритм использования ключей (key management). Является параметром метода аутентификации, о котором написано выше. Говорит о том, как именно происходит обмен ключами шифрования. Рассмотрим возможные варианты. EAP — используется в упомянутом WPA-Enterprice, использует базу данных для сверки введеных аутентификационных данных. SAE — используется в продвинутом WPA3, более устойчива к перебору. PSK — самый частый вариант, подразумевает ввод пароля и его передачу в зашифрованном виде. IEEE8021X — по международному стандарту (отличному от поддержанным семейством WPA). OWE (Opportunistic Wireless Encryption) является расширением стандарта IEEE 802.11, для точек, которые мы отнесли к типу OPEN. OWE обеспечивает безопасность данных, передаваемых по незащищенной сети, за счет их шифрования. Также возможен варинант когда ключей доступа нет, назовем такой вариант NONE.
Третьим параметром является т.н. метод шифрования (encryption schemes) — как именно используется шифр для зашиты передаваемых данных. Перечислим варианты. WEP — использует поточный шифр RC4, секретный ключ является ключом шифрования, что в мире современной криптографии считается неприемлемым. TKIP — используется в WPA, CKIP — в WPA2. TKIP+CKIP — может быть указан в точках умеющих WPA и WPA2 для обратной совместимости.
Вместо трех элементов можно встретить одинокую пометку WEP:
Как мы обсудили выше, этого достаточно чтобы не конкретизировать алгоритм использования ключей, которого нет, и метода шифрования, которое одно по-умолчанию.
Теперь рассмотрим такую скобочку:
Это режим работы Wi-Fi или топология сетей Wi-Fi. Вам может встретиться Режим BSS (Basic Service Set) — когда есть одна точка доступа, через которую общаются подключенные устройства. Можно встретить в локальных сетях. Как правило точки доступа нужны для того, чтобы соединять устройства из разных локальных сетей, поэтому они являются частью Extended Service Sets — ESS. Тип IBSSs (Independent Basic Service Sets) говорит о том, что устройство является частью Peer-to-Peer сети.
Ещё может попасться флаг WPS:
WPS (Wi-Fi Protected Setup) — протокол полуавтоматической инициализации сети Wi-Fi. Для инициализации пользователь либо вводит 8-символьный пароль, либо зажимает кнопку на роутере. Если ваша точка доступа относится к первому типу и этот флажок высветился напротив имени вашей точки доступа, вам настоятельно рекомендуется зайти в админку и отключить доступ по WPS. Дело в том, что часто 8-значный PIN можно узнать по MAC-адресу, либо перебрать за обозримое время, чем кто-то нечистый на руку сможет воспользоваться.
6. Создаем модель и функцию парсинга
На основе того, что выяснили выше опишем data-классами то, что получилось:
Теперь напишем функцию, которая будет парсить поле capabilities:
8. Смотрим результат
Посканирую сеть и покажу, что получилось. Показаны результаты простого вывода через Log.d:
Неосвещенным остался вопрос подключения к сети из кода приложения. Скажу только, что для того, чтобы считать сохраненные пароли ОС мобильного устройства, нужны root-права и готовность порыться в файловой системе чтобы прочитать wpa_supplicant.conf. Если логика приложения предполагает ввод пароля извне, подключение можно осуществить через класс android.net.wifi.WifiManager.
Спасибо Егору Пономареву за ценные дополнения.
Если считаете, что нужно что-то добавить или исправить, пишите в комментарии 🙂
Куда уходит интернет трафик на Андроид? Разбираемся и контролируем
Тема расходования трафика одна из самых актуальных для владельцев любого мобильного устройства. Если превысить лимит трафика по подключенному пакету, можно потерять все деньги на балансе и в итоге остаться без доступа ко всемирной паутине.
Конечно, при использовании Wi-Fi сети никаких проблем с потреблением контента не возникнет (в большинстве случаев), потому что Вай-Фай подразумевает безлимит.
Но из-за того, что в отличие от тех же компьютеров планшеты и телефоны можно эксплуатировать через мобильный интернет, важно знать, как посмотреть расход трафика на Андроид.
К тому же, тарификация мобильной сети намного дороже по сравнению с домашней, даже если оператор связи предоставляет возможность подключения безлимита. Хотя в России и странах бывшего Советского Союза подобное случается крайне редко.
Где посмотреть расход трафика интернета на Андроид
Для контроля трафика, в первую очередь необходимо знать, где посмотреть его потребление. В любом мобильном устройстве под управлением операционной системы Android для этого есть специальный раздел в настройках.
- Перейти в Настройки.
- Открыть раздел “Сеть и интернет”. На некоторых аппаратах он отсутствует, в таком случае данный этап можно пропустить.
- Тануть на пункт “Передача данных”.
Отобразится график с данными об используемом трафике за последний месяц. В понятие месяца здесь входит 30 дней: начиная от 30 дней назад и до настоящей даты. Можно изменить период отображения данных по потреблению трафика.
Чтобы знать, как контролировать использование данных, очень важно видеть их потребление, иначе не будет понятно, хватает вам нынешнего тарифа или нет.
Если вы используете больше, чем в подключенном тарифе от сотового оператора, имеет смысл переключиться на более дешевое предложение.
Если же вы наоборот потребляете больше интернета, и видно, что трафик уже израсходован или скоро окажется таковым, следует либо подключить тариф дороже, либо контролировать свои действия через мобильный интернет на Андроиде.
Как найти приложения, которые потребляют много данных
Чтобы контролировать потребление мобильного интернета, стоит узнать, на что расходуется больше всего трафика. Любое посещение интернета и обмен данными со всемирной паутиной происходят через определенное приложение.
Чаще всего в список самых расходуемых программ входит браузер Google Chrome, YouTube, Instagram, ВКонтакте, TikTok, Play Market или игры (обновления во многих играх могут весить гигабайты данных, что очень много для мобильной сети).
Как найти приложения, потребляющие много данных:
- Перейти в Настройки.
- Открыть раздел “Сеть и интернет”. На некоторых аппаратах он отсутствует, в таком случае данный этап можно пропустить.
- Тануть на вкладку “Передача данных”.
- Проскроллить вниз, чтобы увидеть список приложений. Они указаны в порядке убывания по количеству используемого трафика.
Теперь видно, кто “виновен”. Это еще один важный пункт по контролю тарификации.
Как снизить расход трафика на Android
Итак, с тем, как смотреть количество используемых данных, разобрались. Теперь перейдем к самому главному — как снизить расходование трафика на мобильном устройстве под управлением операционной системы Андроид.
Для снижения расхода трафика есть несколько способов. Каждый из них детально описан далее.
Установить лимит
Самый эффективный и в то же время грубый способ — это установка лимита прямо в операционной системе.
Лимит устанавливается на определенный период времени, и в случае его превышения аппарат будет блокировать использование мобильного интернета даже если тариф сотового оператора это позволяет.
Поэтапные действия для установки лимитирования:
- Перейти в Настройки.
- Открыть раздел “Сеть и интернет”. На некоторых аппаратах он отсутствует, в таком случае данный этап можно пропустить.
- Тануть на вкладку “Передача данных”.
- Переместить ползунок напротив надписи “Лимит мобильного трафика” в активное положение.
- В графике чуть ниже выбрать объем лимитированных данных. Делается это передвижением пальца по графику. Здесь же отображается соотношение используемого трафика к лимиту, что очень удобно.
Настроить предупреждения о превышении расхода трафика
Менее категоричный способ по сравнению с лимитом — это включение предупреждения при превышении потребляемых данных.
Причем не просто придет уведомление с соответствующим сообщением: оповещение не будет закрываться до тех пор, пока вы не отключите мобильный интернет или не измените настройки предупреждения.
- Перейти в Настройки.
- Открыть раздел “Сеть и интернет”. На некоторых аппаратах он отсутствует, в таком случае данный этап можно пропустить.
- Тануть на вкладку “Передача данных”.
- Проскроллить вниз и нажать на надпись “Ограничения трафика”.
- Выбрать пункт “Настройка предупреждения”.
- В появившемся окне вписать количество гигабайт или мегабайт, после которого придет предупреждение о превышении.
Отключить автосинхронизацию
Большинство приложений регулярно синхронизируются, чтобы отправлять максимально актуальные уведомления на мобильное устройство.
Автоматическую синхронизацию можно отключить, но в таком случае вы не будете знать о том, пришло ли сообщение в мессенджер, письмо на почту или что-либо еще. При этом небольшую часть трафика получится сэкономить.
Как отключить автосинхронизацию:
- Перейти в Настройки.
- Открыть раздел “Приложения” (или “Все приложения”).
- Нажать на программу, синхронизацию в которой вы хотите деактивировать.
- Переместить переключатель напротив надписи “Автосинхронизация” в выключенное положение.
Способ удобен тем, что можно выключать автоматическую синхронизацию в конкретных программах, а не во всех.
Отключить всю фоновую передачу данных приложений
Можно отключить или ограничить фоновую передачу данных во всех приложениях, чтобы сэкономить большую часть трафика.
В таком случае программы не будут работать на фоне, а будут активны лишь при прямом использовании. Это не всегда удобно, но если вам очень нужно снизить расход тарификации, следует прибегнуть к данному способу.
Отключение фоновой передачи данных приложений:
- Перейти в Настройки.
- Открыть раздел “Сеть и интернет”. На некоторых аппаратах он отсутствует, в таком случае данный этап можно пропустить.
- Тануть на вкладку “Передача данных”.
- Нажать на символ с тремя вертикальными точками в правом верхнем углу.
- Выбрать пункт “Ограничить фоновый режим”.
- Подтвердить действие.
Отключить ненужные приложения
Можно вообще отключить работу ненужных приложений. В таком случае они не просто не будут потреблять трафик, но и не будут занимать место в оперативной памяти и нагружать гаджет.
Как это сделать:
- Перейти в Настройки.
- Открыть раздел “Приложения” (или “Все приложения”).
- Нажать на программу, которую вы хотите отключить.
- Выбрать кнопку “Выключить” или “Остановить”, подтвердив действие.
Важно: предустановленные системные приложения невозможно деактивировать или удалить.
Периодически отключать мобильный интернет
Довольной простой совет для экономии расхода потребляемых данных — периодически отключать мобильный интернет.
Если вы не пользуетесь аппаратом и нет необходимости в получении уведомлений из приложений, связанных со всемирной паутиной, выключите мобильный интернет.
Если вы часто слушаете музыку через мобильный трафик, рекомендую скачать ее через Wi-Fi и воспроизводить из памяти. Такое простое действие позволит существенно снизить расход используемых данных.
Приложения для контроля интернет трафика
Чтобы упростить контроль трафика, существуют соответствующие приложения. Далее описаны лучшие из них.
My Data Manager
Отличная программа, которая дает возможность устанавливать лимит и наблюдать за потребляемыми данными. Есть вкладка с картой, которая показывает, где именно был потрачен трафик, что довольно удобно и интересно.
Traffic Monitor
В данном приложении нет проблем с тем, как посмотреть расход трафика на Андроид, потому что вся статистика подана подробно и доступно. Есть статистические данные за день, неделю, месяц, год.
3G Watchdog — Data Usage
Минималистичная на вид программа, лишенная рекламы. По функционалу очень похожа на My Data Manager, потому что помимо основных возможностей, можно посмотреть карту расходования трафика.
Добавить комментарий Отменить ответ
Об авторе этого сайта
Привет. Меня зовут Петр. Я автор этого сайта. В нем я рассказываю о том, что мне очень интересно. А именно о планшетах. В блоге я пытаюсь простым языком рассказывать о прошивках, настройках и новинках всех современных планшетов. Также большая часть статей посвящена ОС Андроид, которая мне очень нравится