2012-10-15 12 views
15

Ho la sensazione che sia possibile, non sono abbastanza sicuro di dove si trovano le informazioni.Monitoraggio delle statistiche di rete di un'applicazione (netstats) usando ADB

Desidero ottenere le statistiche su/giù per applicazioni specifiche, ma voglio farlo utilizzando ADB e non wirehark o netty.

so di poter vedere il vmData utilizzando

adb shell 
cd proc 
cd pid# 
cat status 

e so di poter vedere le Netstats utilizzando:

ADB Shell dumpsys netstats details full 

che mi dà questi risultati:

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 

Purtroppo questo appare come un netstat combinato che non distingue tra le applicazioni.

Quindi la mia domanda, c'è un modo per vedere il traffico di rete con nomi di ID o ID PID univoci, semplicemente usando il prompt dei comandi?


EDIT


Va bene ho fatto alcuni buoni passi avanti

Con questo codice

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

posso ottenere queste informazioni:

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 

Sfortunatamente dopo aver ricontrollato questi numeri con programmi come "Utilizzo di rete" dal marketplace Android, ho scoperto che questi numeri sono il totale su e giù per l'intero dispositivo.

Quindi mi lascia ancora, come/dove diamine sono programmi come "Utilizzo di rete" e "Pezzi di ricambio" ottenendo le loro informazioni da?

+0

Wow, enormi quantità di informazioni utili qui . Grazie per aver postato questo. –

+0

Grazie, se c'è qualcos'altro che devi sapere o hai qualche domanda, fammi sapere. È probabile che abbia scritto qualcosa per esso o possa indirizzarti verso la giusta direzione. – Nefariis

+0

@Nefarii Sto facendo una cosa molto simile, ma senza i privilegi di un super utente, c'è un modo per ottenere lo stesso senza su – SwiftParser

risposta

19

Bene, ho capito da dove "pezzi di ricambio" e "Utilizzo rete" ricevono le loro informazioni.

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

Il problema che vedo con il modo in cui lo stanno facendo però è che questo solo account per l'utilizzo di TCP e non rappresentano e l'uso di UDP.

L'unico modo per calcolare il totale tx_bytes e rx_bytes è tramite questo comando.

adb shell cat /proc/net/xt_qtaguid/stats 

o se si desidera convertirlo in un file di testo e visualizzarlo più facilmente.

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

Questo ti dà qualcosa che assomiglia a questo:

------ 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 quarta scheda sopra (1000, 10001, ecc) è il numero UID.Il modo più semplice per scoprire quale applicazione appartiene a quale numero UID è:

adb shell dumpsys package > C:\apps.txt 

scendere al "Pacchetto:" sezione e quindi la sua prima linea verso il basso dopo il nome del processo denominato "userid =".

Ora per leggere la tabella sopra, i due numeri principali che si desidera conoscere sono il sesto numero in (i rx_bytes) e l'ottavo numero in (i tx_bytes). Questi due numeri dovrebbero essere un ritratto accurato di tutti i byte dentro e fuori, per ogni particolare applicazione.

Divertiti.

+1

non funziona su 2.3 sembra che/proc/net/xt_qtaguid/stats non sia disponibile per il pan di zenzero. –

+0

Quando ho iniziato a svilupparlo credo di averlo fatto sia con pan di zenzero e panino gelato ... anche se penso che doveva essere stato almeno il 2.3.6 da allora ... Inoltre, cosa stai ancora facendo a 2.3? Puoi andare alla cartella manualmente? "adb shell"> "cd/proc/net/xt_qtaguid? se puoi farlo digita" ls "e verifica se" stats "esiste se esiste, quindi digita semplicemente" cat stats " – Nefariis

+0

/proc/net/xt_qtaguid/non esiste in 2.3 –

1

Aggiunta di un frammento al commento di Nefarii, il modo più semplice per scoprire l'UID per una particolare applicazione, ad esempio, com.example.myapp, è:

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

+0

Ive non è mai stato in grado di far funzionare correttamente la grep, anche con una nuova installazione di busybox. – Nefariis

+1

grep non funziona su Android; lo esegui sull'host. Immagino che se stai provando a sviluppare da Windows, avrai alcuni problemi. –

Problemi correlati