- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我觉得这是可能的,我只是不太确定信息保存在哪里。
我想获取特定应用程序的上升/下降统计信息,但我想使用 ADB 而不是 wireshark 或 netty 来完成。
我知道我可以使用
查看 vmDataadb 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 市场上的“网络使用”之类的程序仔细检查了这些数字后,我发现这些数字是整个设备的上下总数。
所以我仍然想知道,“网络使用”和“备件”之类的程序到底是如何/从哪里获取信息的?
最佳答案
我知道“备件”和“网络使用情况”从哪里获取信息。
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=”的进程名称之后的第一行。
现在阅读上面的图表,您想知道的主要两个数字是(rx_bytes)中的第 6 个数字和(tx_bytes)中的第 8 个数字。对于任何特定的应用程序,这两个数字应该是所有输入和输出字节的准确描述。
享受吧。
关于android - 使用 ADB 跟踪应用程序的网络统计信息 (netstats),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12904809/
使用 http://developer.android.com/training/basics/firstapp/running-app.html 上的指南,我使用 adb 将示例 Hello, Wo
如何修复 - 无法创建调试桥:无法启动 adb 服务器:无法检测 adb 版本,adb 输出:/home/dilip/Downloads/sdk/platform-tools/adb: 1:/home
我在 UBUNTU 18.x 操作系统上练习 REACT NATIVE,一切运行顺利,昨天我更新了我的 React native、react 和 android gradle 版本然后我收到一些错误,
这个问题在这里已经有了答案: android studio adb Syntax error: ")" unexpected (4 个答案) 关闭 5 年前。 我确实将我的工作室更新到 Linux
这是我的步骤: adb connect 'my android IP address' connected adb reboot //in this step my phone is rebootin
我有一个应用程序可以监听接收通知。安装后,我应该从设置 -> 安全 -> 通知访问启用通知访问 我在模拟器上安装这个应用程序并使用 ADB 运行它。但我不知道如何使用 ADB 中的命令行为其启用通知访
ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 它的主要功能
我知道这个问题被问了多次,也有一些替代答案。所以请不要关闭其他链接,因为我在下面添加了该链接。 [2014-01-23 16:19:44 - adb] ADB server didn't ACK [2
我在 adb 中观察到了这种新行为v1.0.39。命令: adb shell getevent -l 给出以下输出: 观察到最后一行是不完整的。这发生在许多不同的设备上。相同的命令在 adb 中无需缓
我正在尝试通过 adb shell am 和 adb shell service call 发送短信。我都收到错误消息。 a) 我正在尝试按照 adb shell am 命令发送短信 adb shel
由于某些原因,我的手机无法使用电缆。 我在 Internet 上看到可以通过 Wifi 将 adb 连接到 Wifi,但是我试了一下,结果是这样的: adb devices List of devic
尝试通过 expo 在模拟器上运行 react-native 应用程序时出现此错误。 Couldn't start project on Android: Error running adb: adb
这个问题在这里已经有了答案: adb server version doesn't match this client (41 个回答) 关闭4年前。 在启动 genymotion 模拟器后尝试从终
adb server version (39) doesn't match this client (40); killing... could not read ok from ADB Server
我已经创建了一个虚拟 Android 模拟器 (Nexus_5X_API25),我需要获得根访问权限。但是当我输入 adb remount 命令时,它总是告诉我 adb 没有以 root 身份运行。我
这个问题在这里已经有了答案: ADB - Android - Getting the name of the current activity (13 个答案) 关闭 4 年前。 我正在使用 adb
我只是想运行 adb shell,这样我就可以终止进程以进行测试。我在目录 platform-tools 中,adb 可执行文件就在那里。当我尝试运行 shell 时,它说找不到 adb 命令。我正在
我刚刚安装了 android studio 和平台工具,但我无法调用 adb,即使它们显然位于同一目录中。我收到此错误: zsh: command not found: adb 我是 android
以下命令用于使用 Android SDK 工具版本 24.4.1 退出模拟器。将工具版本更新到 25.1.6 后,它在 Mac 上停止工作。 adb -s emulator-5554 emu kill
我正在尝试 root 第 8 代 Kindle HD Fire (Fire OS 6.3.0.1)我已经打开了 Developer options,但是 Enable ADB 没有列在它下面。还有其他
我是一名优秀的程序员,十分优秀!