2012-10-15 67 views
15

我有一種感覺,這是可能的,我只是不太確定信息的保存位置。使用ADB跟蹤應用程序的網絡統計數據(netstats)

我想獲得特定應用程序的上/下統計數據,但我想使用ADB而不是wireshark或netty。

我知道我可以使用

adb shell 
cd proc 
cd pid# 
cat status 

看到vmData,我知道我可以用看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市場上的「Network Usage」程序再次檢查這些數字後,我發現這些數字是整個設備上下的總數。

因此,它仍然讓我感受到,「網絡使用」和「備件」等程序如何從何處獲取信息?

+0

哇,大量有用的信息在這裏。感謝您發佈此信息。 –

+0

謝謝,如果您還有其他問題需要了解或有任何疑問,請告訴我。機會是我爲它編寫了一些東西,或者可以指出你正確的方向。 – Nefariis

+0

@Nefarii我正在做一個非常類似的事情,但沒有超級用戶權限,有沒有什麼辦法可以達到同樣的效果呢? – SwiftParser

回答

19

那麼我想出了「備件」和「網絡使用情況」從哪裏得到他們的信息。

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 

下到「包裝」部分,然後將其下來之後的進程名稱標示爲「用戶ID =」第一行。

現在閱讀上面的圖表,你想知道的主要兩個數字是(rx_bytes)中的第6個數字和(tx_bytes)中的第8個數字。對於任何特定的應用程序,這兩個數字應該是所有字節輸入和輸出的準確描述。

享受。

+1

它不工作2.3看起來/ proc/net/xt_qtaguid/stats不可用於薑餅。 –

+0

當我第一次開始研究這個時,我相信我是用薑餅和冰淇淋三明治來做的......雖然我認爲到那時它至少要達到2.3.6 ....還有,你還在做什麼在2.3?你可以手動去文件夾嗎? 「adb shell」>「cd/proc/net/xt_qtaguid?如果你可以這樣做,然後輸入」ls「並查看是否存在」stats「,那麼只需輸入」cat stats「 – Nefariis

+0

/proc/net/xt_qtaguid /不存在2.3 –

1

添加代碼段Nefarii的評論,找出UID爲特定應用的最簡單的方法,例如,com.example.myapp是:

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

+0

即使全新安裝了busybox,我也從未能夠正確使用grep工具。 – Nefariis

+1

grep在Android下無法使用;你在主機上運行它。我猜如果你想從Windows開發,你會遇到一些問題。 –