使用ADB跟踪应用程序的networking统计信息(netstats)

我有一种感觉,这是可能的,我只是不太确定信息的保存位置。

我想获得具体应用程序的上/下统计,但我想用ADB而不是wireshark或netty。

我知道我可以看到使用vmData

adb shell cd proc cd pid# cat status 

我知道我可以看到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#或应用程序名称的networkingstream量?


编辑


好吧,我取得了一些进展

用这个代码

  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市场上的“networking使用”这样的程序仔细检查这些数字之后,我发现这些数字是整个设备上下的总数。

所以它仍然让我知道,“networking使用”和“备件”等程序是如何从哪里获得信息的?

Solutions Collecting From Web of "使用ADB跟踪应用程序的networking统计信息(netstats)"

那么我想出了“备件”和“networking使用”从哪里得到他们的信息。

 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 

回到“Package:”部分,然后在标记为“userid =”的进程名称之后将其第一行closures。

现在读上面的图表,你想知道的主要两个数字是(rx_bytes)中的第六个数字和(tx_bytes)中的第八个数字。 对于任何特定的应用程序,这两个数字应该是所有字节input和输出的准确描述。

请享用。

为Nefarii的评论添加一个片段,找出特定应用程序(例如com.example.myapp)的UID最简单的方法是:

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