android - setprop - Seguimiento de las estadísticas de red de una aplicación(netstats) utilizando ADB
getprop (2)
Tengo la sensación de que esto es posible, pero no estoy muy seguro de dónde se guarda la información.
Quiero obtener las estadísticas de subida / bajada para aplicaciones específicas, pero quiero hacerlo utilizando ADB y no wireshark o netty.
Sé que puedo ver el vmData usando
adb shell
cd proc
cd pid#
cat status
y sé que puedo ver los netstats usando:
ADB Shell dumpsys netstats details full
lo que me da estos resultados:
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
Desafortunadamente, esto parece un netstat combinado que no distingue entre aplicaciones.
Entonces, mi pregunta, ¿hay una manera de ver el tráfico de la red por nombres de aplicación o PID únicos, simplemente usando el símbolo del sistema?
EDITAR
Bien, hice algunos buenos pasos.
Con este codigo
adb shell cat proc/1638(thePID)/net/dev > C:/netstats.txt
Puedo obtener esta información:
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
Desafortunadamente, después de verificar dos veces estos números con programas como "Uso de la red" en el mercado de Android, descubrí que estos números son el total hacia arriba y hacia abajo en todo el dispositivo.
Así que todavía me deja con, ¿cómo / dónde diablos están los programas como "Uso de la red" y "Piezas de repuesto" obteniendo su información?
Al agregar un fragmento al comentario de Nefarii, la forma más fácil de averiguar el UID para una aplicación en particular, por ejemplo, com.example.myapp, es:
adb shell dumpsys package com.example.myapp | grep userId=
Bueno, me di cuenta de dónde obtienen su información las "piezas de repuesto" y el "uso de red".
adb shell cat proc/uid_stat/(uid#)/tcp_rcv
adb shell cat proc/uid_stat/(uid#)/tcp_snd
El problema que veo con la forma en que lo están haciendo es que esto solo representa el uso de TCP y no el uso de UDP.
La única forma de calcular el total de tx_bytes y rx_bytes es a través de este comando.
adb shell cat /proc/net/xt_qtaguid/stats
o si desea convertirlo en un archivo de texto y verlo más fácilmente.
adb shell cat /proc/net/xt_qtaguid/stats > C:/Netstats.txt
Esto te da algo que se parece a esto:
------ 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
La cuarta pestaña sobre (1000, 10001, etc.) es el número UID. La forma más fácil de averiguar qué aplicación pertenece a qué número de UID es:
adb shell dumpsys package > C:/apps.txt
Vaya a la sección "Paquete:" y luego la primera línea hacia abajo después del nombre del proceso con la etiqueta "userid =".
Ahora para leer la tabla anterior, los dos números principales que desea conocer son el número 6 en (los rx_bytes) y el número 8 en (los tx_bytes). Esos dos números deben ser una representación precisa de todos los bytes de entrada y salida, para cualquier aplicación en particular.
Disfrutar.