Android 跟踪应用程序';s使用ADB的网络统计(netstats)

Android 跟踪应用程序';s使用ADB的网络统计(netstats),android,adb,netstat,Android,Adb,Netstat,我觉得这是可能的,我只是不太确定信息保存在哪里 我想获得特定应用程序的上/下统计数据,但我想使用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

我觉得这是可能的,我只是不太确定信息保存在哪里

我想获得特定应用程序的上/下统计数据,但我想使用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或应用程序名称来查看网络流量


编辑


好吧,我迈出了一些很好的步伐

使用此代码

 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 market place的“网络使用”等程序仔细检查这些数字后,我发现这些数字是整个设备上下的总和

因此,它仍然留给我,像“网络使用”和“备件”这样的程序是如何/从何处获取信息的

我知道了“备件”和“净使用量”的信息来源

adb shell cat proc/uid_stat/(uid#)/tcp_rcv
adb shell cat proc/uid_stat/(uid#)/tcp_snd
我看到的问题是,他们是如何做到这一点的,因为这只考虑TCP的使用,而不考虑和UDP的使用

计算总tx_字节和rx_字节的唯一方法是通过此命令

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=”的进程名称后的第一行

现在阅读上面的图表,您想知道的两个主要数字是第6个(rx_字节)和第8个(tx_字节)。对于任何特定的应用程序,这两个数字应该是所有字节输入和输出的准确描述


享受。

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


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

我一直无法让grep正常工作,即使是新安装的busybox.grep在Android下也无法工作;您可以在主机上运行它。我想如果你想从Windows开发,你会遇到一些问题。哇,这里有大量有用的信息。谢谢你的发帖。谢谢你,如果你还有什么需要知道或有任何问题,请告诉我。很可能我已经为它编写了一些脚本,或者可以为您指出正确的方向。@Nefarii我正在做一件非常类似的事情,但是没有超级用户权限,有没有办法在没有su@Swiftparser-这不需要SU。事实上,我每周都会在没有SU权限的全新设备上运行此命令。它在2.3上不起作用,似乎/proc/net/xt_qtaguid/stats不适用于姜饼。当我第一次开发此命令时,我相信我同时使用姜饼和冰淇淋三明治。。。虽然我认为那时至少已经是2.3.6了。。。。还有,你还在2.3上做什么?你能手动转到文件夹吗?“adb shell”>“cd/proc/net/xt_qtaguid”?如果可以,请键入“ls”,查看是否存在“stats”,如果存在,则只需键入“cat stats”“/proc/net/xt_qtaguid/在2.3中不存在,因此,您将希望忽略帐户标记为非0x0十六进制的行。该文件将列出每个用户标识的每个线程的使用情况。如果您计算那些不是0x0的行,那么您将重复计算所使用的数据。要测试我所说的,请使用下载管理器功能从应用程序开始下载。它将使用一个单独的线程,您将在您的文件中的单独一行中看到相应的userid。adb shell cat/proc/net/xt_qtaguid/stats此命令是否提供任何给定时刻的网络统计信息,或提供应用程序自安装以来的总网络使用情况?我的用例是拥有给定实例/日期时间的网络统计