2012-10-15 4 views
15

Ich habe das Gefühl, das ist möglich, ich bin nur nicht ganz sicher, wo die Informationen gehalten werden.Verfolgen der Netzwerkstatistik einer Anwendung (Netstats) mit ADB

Ich möchte die up/down Statistiken für bestimmte Anwendungen, aber ich möchte es mit ADB und nicht wireshark oder netty tun.

Ich weiß, dass ich die Vmdata

mit sehen
adb shell 
cd proc 
cd pid# 
cat status 

und ich weiß, dass ich die netstats sehen mit:

ADB Shell dumpsys netstats details full 

, die mir diese Ergebnisse gibt:

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 

Leider Dies sieht wie ein kombinierter Netstat aus, der nicht zwischen Anwendungen unterscheidet.

Also meine Frage, gibt es eine Möglichkeit, Netzwerkverkehr durch eindeutige PID # oder Anwendungsnamen zu sehen, einfach mit der Eingabeaufforderung?


EDIT


Okay ich

Mit diesem Code

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

einige gute Fortschritte gemacht

ich diese Informationen bekommen:

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 

Leider habe ich nach der doppelten Überprüfung dieser Nummern mit Programmen wie "Network Usage" vom Android Marketplace festgestellt, dass diese Zahlen die Summe auf und ab über das gesamte Gerät sind.

Also bleibt mir noch, wie/wo zum Teufel Programme wie "Network Usage" und "Spare Parts" ihre Informationen bekommen?

+0

Wow, große Mengen an nützlichen Informationen hier . Danke für das Posten. –

+0

Vielen Dank, wenn Sie noch etwas wissen oder Fragen haben sollten, lassen Sie es mich wissen. Wahrscheinlich habe ich etwas dafür geschrieben oder kann Sie in die richtige Richtung weisen. – Nefariis

+0

@Nefarii Ich mache eine sehr ähnliche Sache, aber ohne eine Super-User-Privilegien, gibt es eine Möglichkeit, das gleiche ohne su zu erreichen – SwiftParser

Antwort

19

Nun habe ich herausgefunden, woher "Ersatzteile" und "Net Usage" ihre Informationen bekommen.

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

Das Problem sehe ich mit, wie sie es aber tun, ist, dass dies nur Konten für TCP-Nutzung und nicht für und UDP-Nutzung nicht zu berücksichtigen.

Die einzige Möglichkeit, die Gesamtanzahl von tx_bytes und rx_bytes herauszufinden, besteht in diesem Befehl.

adb shell cat /proc/net/xt_qtaguid/stats 

oder wenn Sie es in eine Textdatei konvertieren und es einfacher anzeigen möchten.

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

Dies gibt Ihnen etwas, das wie folgt aussieht:

------ 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 

Der vierte Reiter über (1000, 10001, usw.) ist die UID-Nummer.Der einfachste Weg, um herauszufinden, welche Anwendung gehört, was UID-Nummer:

adb shell dumpsys package > C:\apps.txt 

zum Runter „Package:“ Abschnitt, und dann seine die erste Zeile nach unten, nachdem der Prozessname „Benutzer-ID =“ gekennzeichnet.

Nun, um das obige Diagramm zu lesen, sind die wichtigsten zwei Zahlen, die Sie wissen wollen, die sechste Zahl in (die rx_bytes) und die achte Zahl in (der tx_bytes). Diese beiden Zahlen sollten eine genaue Darstellung aller ein- und ausgehenden Bytes für eine bestimmte Anwendung sein.

Genießen.

+1

es funktioniert nicht auf 2.3 scheint, dass/proc/net/xt_qtaguid/stats nicht für Lebkuchen verfügbar. –

+0

Als ich anfing, dies zu entwickeln, glaube ich, dass ich es sowohl mit Lebkuchen als auch mit Eiscremesandwich gemacht habe ... obwohl ich denke, dass es bis dahin mindestens 2.3.6 gewesen sein muss ... Was machst du noch? auf 2.3? Können Sie manuell in den Ordner wechseln? "adb shell"> "cd/proc/net/xt_qtaguid? Wenn Sie das tun können, geben Sie" ls "ein und sehen, ob" stats "existiert, wenn es existiert. Geben Sie einfach" cat stats " – Nefariis

+0

/proc/net/xt_qtaguid ein/ist nicht in 2.3 vorhanden –

1

einen Ausschnitt zu Nefarii Kommentar hinzufügen, ist der einfachste Weg, um die UID für eine bestimmte Anwendung zu erfahren, zB com.example.myapp ist:

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

+0

Ich war nie in der Lage, das Grep-Ding richtig funktionieren zu lassen, selbst mit einer neuen Installation von Busybox. – Nefariis

+1

Grep funktioniert nicht unter Android; Sie führen es auf dem Host aus. Ich denke, wenn Sie versuchen, von Windows zu entwickeln, werden Sie einige Probleme haben. –

Verwandte Themen