2012-10-15 17 views
15

Mam przeczucie, że to możliwe, ale nie jestem do końca pewien, gdzie są przechowywane informacje.Śledzenie statystyk sieci (netstats) przy użyciu ADB

Chcę uzyskać statystyki do góry/w dół dla konkretnych aplikacji, ale chcę to zrobić za pomocą ADB, a nie wireshark lub netty.

wiem, że mogę zobaczyć vmData użyciu

adb shell 
cd proc 
cd pid# 
cat status 

i wiem, że mogę zobaczyć netstats używając:

ADB Shell dumpsys netstats details full 

który daje mi te wyniki:

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 

Niestety to wygląda na połączony netstat, który nie rozróżnia między aplikacjami.

Moje pytanie brzmi, czy istnieje sposób na zobaczenie ruchu sieciowego przez unikalne nazwy PID lub aplikacji, po prostu używając wiersza polecenia?


EDIT


Dobrze zrobiłem kilka dobrych krokami

Z tym kodem

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

mogę uzyskać te informacje:

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 

Niestety, po podwójnym sprawdzeniu tych liczb za pomocą programów takich jak "Użycie w sieci" z rynku Android, odkryłem, że te liczby są sumą w górę iw dół na całym urządzeniu.

Wciąż pozostawia mi to, jak/gdzie do cholery są programy takie jak "Wykorzystanie sieci" i "Części zapasowe", pobierając z nich swoje informacje?

+0

Wow, ogromne ilości przydatnych informacji tutaj . Dzięki za zamieszczenie tego. –

+0

Dziękuję, jeśli jest coś jeszcze, co musisz wiedzieć lub masz jakieś pytania, daj mi znać. Prawdopodobnie napisałem coś dla niego lub wskazałem właściwy kierunek. – Nefariis

+0

@Nefarii Robię coś bardzo podobnego, ale bez uprawnień superużytkownika, jest jakikolwiek sposób na osiągnięcie tego samego bez su – SwiftParser

Odpowiedz

19

Sprawdziłem, skąd pochodzą "części zamienne" i "użytkowanie sieciowe".

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

Problem widzę w jaki to robią jest jednak, że to tylko rachunki za korzystanie TCP i nie odpowiadają za wykorzystanie i UDP.

Jedynym sposobem obliczenia całkowitej liczby tx_bytes i rx_bytes jest wykonanie tego polecenia.

adb shell cat /proc/net/xt_qtaguid/stats 

lub jeśli chcesz przekonwertować plik tekstowy i wyświetlić go łatwiej.

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

Daje to coś, co wygląda tak:

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

Czwarta zakładka nad (1000, 10001, etc) to numer UID.Najprostszym sposobem, aby dowiedzieć się, co należy do aplikacji, co jest numer UID:

adb shell dumpsys package > C:\apps.txt 

Zejdź do „Pakietu:” sekcji, a następnie jej pierwsza linia w dół po nazwie proces jako „userid =”.

Teraz, aby przeczytać powyższy wykres, główne dwie liczby, które chcesz poznać, to szósta liczba w (rx_bytes) i ósma liczba w (tx_bytes). Te dwie liczby powinny być dokładnym odwzorowaniem wszystkich bajtów wejściowych i wyjściowych dla każdej konkretnej aplikacji.

Ciesz się.

+1

to nie działa na 2.3 wydaje się, że/proc/net/xt_qtaguid/statystyki nie są dostępne dla piernika. –

+0

Kiedy po raz pierwszy zacząłem to rozwijać, wierzę, że robiłem to z kanapkami z piernika i lodów ... choć myślę, że do tego czasu musiało to być co najmniej 2.3.6 .... Co dalej robisz? w wersji 2.3? Czy możesz przejść do folderu ręcznie? "adb shell"> "cd/proc/net/xt_qtaguid?" Jeśli możesz to zrobić, wpisz "ls" i sprawdź, czy istnieją "statystyki", jeśli istnieje, to wpisz "statystyki kota" – Nefariis

+0

/proc/net/xt_qtaguid/nie istnieje w 2.3 –

1

Dodanie fragmentu do komentarza Nefarii, w najprostszy sposób, aby dowiedzieć się UID dla konkretnej aplikacji, np com.example.moja_aplikacja jest:

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

+0

Ive nigdy nie był w stanie sprawić, by grep coś działało poprawnie, nawet przy świeżej instalacji busybox. – Nefariis

+1

grep nie działa pod kontrolą systemu Android; uruchamiasz go na hoście. Wydaje mi się, że jeśli próbujesz tworzyć z Windowsa, będziesz mieć pewne problemy. –

Powiązane problemy