android - 我在哪里可以从 Android 设备读取 WiFi 数据包丢失计数器?

标签 android networking

我正在寻找从 WiFi 网络读取丢包计数器的方法。

它应该通过 adb shellJavaC (NDK) 或您的方式

Android 未 root。

我有一个接入点,其中我使用 Dummynet 服务配置了 2% 的数据包丢失。

我在 PC 上使用 wget 命令并从本地服务器下载 50 Mb 的文件(LAN 的带宽应为 `100Mb)。我看到丢包配置带宽从 100Mb 减少到 3Mb 后,这意味着一切正常。

到目前为止还不错,

我的设备 (Android) 通过 WiFi 连接到上述 AP。

我尝试下载相同的 50 Mb 文件,下载速率为 3M,但我没有看到任何错误或重传计数器上升。

我使用 adb shell CLI 并输入到:sys/class/net/eth0/statistics 我看到的地方:

-r--r--r-- root     root         4096 2012-12-04 15:42 rx_packets
-r--r--r-- root     root         4096 2012-12-04 15:42 tx_packets
-r--r--r-- root     root         4096 2012-12-04 15:41 rx_bytes
-r--r--r-- root     root         4096 2012-12-04 15:41 tx_bytes
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 tx_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_dropped
-r--r--r-- root     root         4096 2012-12-04 15:43 tx_dropped
-r--r--r-- root     root         4096 2012-12-04 15:43 multicast
-r--r--r-- root     root         4096 2012-12-04 15:43 collisions
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_length_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_over_errors
-r--r--r-- root     root         4096 2012-12-04 15:43 rx_crc_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_frame_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_fifo_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_missed_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_aborted_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_carrier_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_fifo_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_heartbeat_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_window_errors
-r--r--r-- root     root         4096 2012-12-04 15:38 rx_compressed
-r--r--r-- root     root         4096 2012-12-04 15:38 tx_compressed

所以我运行 cat * 并获得除 4 之外的所有上述文件的 0 值:

tx/rx_packets/bytes 是活跃的,这意味着我使用写接口(interface):

cat rx_packets
9106

如果知道其他方法来检测数据包丢失或以编程方式获取它,将不胜感激

最佳答案

除非我弄错了你的要求。如果您连接到与移动设备相同的网络,则可以使用 wireshark。

或者你可以做一个tcpdump,然后通过wireshark分析它,得到丢包。

这里有一些链接可能会对您有所帮助。

http://dennismillerdev.wordpress.com/2011/02/03/debug-network-activity-in-android-using-wireshark/ http://mobile.tutsplus.com/tutorials/android/analyzing-android-network-traffic/ Capturing mobile phone traffic on wireshark

如果您只是想进行一般的连通性测试。您可以尝试简单地向服务器发送一系列 UDP 数据包,服务器回显相同的数据包作为响应。有一个单独的线程同时运行,试图从服务器接收这些数据包。如果您想进行其他测量,请记录时间戳,但如果返回的数据包少于发送的数据包,您就会知道丢失了多少数据包。如果您给数据包一个包含 id 的 1 字节有效负载。 (即:发送 20 个 ID 为 1-20 的数据包),然后当您从服务器收到数据包时,您可以检查负载并查看哪些数据包丢失和/或顺序错误。

除此之外,您在不对手机进行 root 的情况下受到限制。您可以使用 TrafficStats 获取发送的数据包数量 getTotalRxPackets()getTotalTxPackets()获取发送/接收的总数据包。或者,如果您使用更高级别的 API,您甚至可以获得每个应用程序的 UDP 数据包数量。所以你可以找到发送和接收但没有丢失的数据包数量。

如果您知道设备发送了多少数据包,并且在服务器端检测到从该设备传入的数据包数量,那么差异应该也有助于您了解丢失数据包的数量。 (此方法需要您控制服务器并涉及更多的设备-服务器通信)

希望这对您有所帮助。

关于android - 我在哪里可以从 Android 设备读取 WiFi 数据包丢失计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705102/

相关文章:

android - 原文件 'AndroidManifest.xml'已被删除或不可访问

android - Android到底是如何判断是否在线的呢?

android - 如何构建符合 Google Play 64 位要求的 NativeScript Vue 应用程序?

networking - 如何从主机上的浏览器连接到 docker 容器?

ios - AFNetworking 并在全局范围内存储 Cookie

c++ - HTTP 代理检测 HTTP 客户端断开连接

javascript - 从 VPC 中的 Lambda 访问 API Gateway - 请求超时

Android eclipse startManagingCursor 已弃用但想支持较旧的 API 版本?

android - 图像处理 : API to classify text based on font-type and size

java - SharedPreferences 在应用程序被销毁时丢失数据