Intereting Posts
Карты Google Maps Google получают граничные координаты IntelliJ Idea не генерирует id в R.java TextView для отправки электронной почты при нажатии В proguard, как сохранить набор имен методов классов? Firebase JobDispatcher – как он работает по сравнению с предыдущими API (JobScheduler и GcmTaskService)? Использовать Picasso для получения обратного вызова с помощью Bitmap SetRotation (90) для съемки в портретном режиме не работает на устройствах samsung Производительность Android достигла более поздних версий, чем 2.3.5 (phonegap / cordova) Строка состояния становится белой и не отображает содержимое за ней Проблема создания виртуального устройства Android (AVD) на Ubuntu 16.04 Ошибка: выполнение выполнено для задачи ': app: buildInfo Debug Loader' Добавление папки с ресурсами в Android Studio Android: ошибка libGL.so: невозможно открыть файл общих объектов: нет такого файла или каталога При использовании clipToPadding в ListView элементы перерабатываются преждевременно OnTaskRemoved () не получает вызов в устройствах HUAWEI и XIOMI

Отслеживание сетевой статистики приложения (netstats) с использованием ADB

У меня такое чувство, что это возможно, я просто не совсем уверен, где информация хранится.

Я хочу получить статистику вверх / вниз для конкретных приложений, но я хочу сделать это, используя ADB, а не wirehark или netty.

Я знаю, что вижу vmData, используя

adb shell cd proc cd pid# cat status 

И я знаю, что вижу netstats, используя:

 ADB Shell dumpsys netstats details full 

Что дает мне следующие результаты:

 Dev stats: Pending bytes: 1410076 Complete history: ident=[[type=MOBILE, subType=COMBINED, subscriberId=310260...]] uid=-1 set=ALL tag=0x0 NetworkStatsHistory: bucketDuration=3600000 bucketStart=1349211600000 activeTime=3600000 rxBytes=19656154 rxPackets=16897 txBytes=615620 txPackets=8084 operations=0 bucketStart=1349215200000 activeTime=3600000 rxBytes=28854708 rxPackets=23363 txBytes=1037409 txPackets=12206 operations=0 bucketStart=1349218800000 activeTime=3600000 rxBytes=1839274 rxPackets=1565 txBytes=89791 txPackets=914 operations=0 bucketStart=1349222400000 activeTime=3600000 rxBytes=17421 rxPackets=88 txBytes=18376 txPackets=95 operations=0 bucketStart=1349226000000 activeTime=3600000 rxBytes=506966 rxPackets=788 txBytes=96491 txPackets=859 operations=0 

К сожалению, это выглядит как комбинированный netstat, который не различает приложения.

Итак, мой вопрос, есть ли способ увидеть сетевой трафик с помощью уникальных имен PID или приложений, просто используя командную строку?


РЕДАКТИРОВАТЬ


Хорошо, я сделал хорошие успехи

С помощью этого кода

  adb shell cat proc/1638(thePID)/net/dev > C:\netstats.txt 

Я могу получить эту информацию:

 Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 3564 28 0 0 0 0 0 0 3564 28 0 0 0 0 0 0 dummy0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet0: 117062940 191775 0 0 0 0 0 0 19344640 177574 0 0 0 0 0 0 rmnet1: 2925492 5450 0 0 0 0 0 0 1448544 5664 0 0 0 0 0 0 rmnet2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet7: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 vip0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

К сожалению, после двойной проверки этих номеров с помощью таких программ, как «Использование сети» с рынка Android, я обнаружил, что эти цифры являются суммарными вверх и вниз по всему устройству.

Так что это все еще оставляет меня, как / где, черт возьми, такие программы, как «Сетевое использование» и «Запасные части», получающие их информацию?

Solutions Collecting From Web of "Отслеживание сетевой статистики приложения (netstats) с использованием ADB"

Ну, я понял, где «запасные части» и «нетто-использование» получают свою информацию.

 adb shell cat proc/uid_stat/(uid#)/tcp_rcv adb shell cat proc/uid_stat/(uid#)/tcp_snd 

Проблема, которую я вижу в том, как они это делают, заключается в том, что это только учетные записи для использования TCP, а не учет и использование UDP.

Эта команда позволяет определить только общие tx_bytes и rx_bytes.

 adb shell cat /proc/net/xt_qtaguid/stats 

Или если вы хотите преобразовать его в текстовый файл и просмотреть его проще.

 adb shell cat /proc/net/xt_qtaguid/stats > C:\Netstats.txt 

Это дает вам нечто похожее на это:

 ------ QTAGUID STATS INFO (su root cat /proc/net/xt_qtaguid/stats) ------ idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_bytes rx_tcp_packets rx_udp_bytes rx_udp_packets rx_other_bytes rx_other_packets tx_tcp_bytes tx_tcp_packets tx_udp_bytes tx_udp_packets tx_other_bytes tx_other_packets 2 rmnet0 0x0 0 0 18393 326 8506 166 10889 267 7504 59 0 0 4180 101 3397 54 929 11 3 rmnet0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 rmnet0 0x0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 rmnet0 0x0 1000 1 7181 14 1834 19 7023 12 158 2 0 0 1616 16 218 3 0 0 6 rmnet0 0x0 10001 0 5723 19 3162 26 5723 19 0 0 0 0 3162 26 0 0 0 0 7 rmnet0 0x0 10001 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 rmnet0 0x0 10007 0 1895740 1570 44556 898 1895740 1570 0 0 0 0 44556 898 0 0 0 0 9 rmnet0 0x0 10007 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 rmnet0 0x0 10019 0 5319 12 2546 14 5319 12 0 0 0 0 2546 14 0 0 0 0 11 rmnet0 0x0 10019 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 rmnet0 0x0 10026 0 6866 19 2846 24 6866 19 0 0 0 0 2846 24 0 0 0 0 13 rmnet0 0x0 10026 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

Четвертая вкладка (1000, 10001 и т. Д.) – это номер UID. Самый простой способ узнать, какое приложение относится к числу UID:

 adb shell dumpsys package > C:\apps.txt 

Перейдите в раздел «Пакет:», а затем его первую строку вниз после имени процесса с надписью «userid =».

Теперь, чтобы прочитать приведенную выше диаграмму, основными двумя номерами, которые вы хотите узнать, являются 6-е число (rx_bytes) и 8-е число (tx_bytes). Эти два номера должны быть точным изображением всех байтов в и из любого конкретного приложения.

Наслаждаться.

Добавив фрагмент к комментарию Nefarii, самый простой способ узнать UID для конкретного приложения, например com.example.myapp, это:

adb shell dumpsys package com.example.myapp | grep userId=