獨家密技傳授,Firefox OS 分析網路問題工具!

作者:
瀏覽:650

在使用 Firefox OS 的過程中,要如何分析所遇到網路的問題呢?這裡提供幾個常用的方式讓大家參考。

  • 查看設備上所有網路介面資訊 — netcfg

使用 netcfg 可查看所有的網路介面資訊。在這些介面中,Wifi 網路通常用 wlan0,而 3G 網路通常用 rmnet0(多個 APN 時,可能用到 rmnet1/rmnet2…)。

$ adb shell netcfg
lo       UP                                   127.0.0.1/8   0x00000049 00:00:00:00:00:00
rmnet0   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet1   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet2   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet3   DOWN                                   0.0.0.0/0   0x00001002 2e:56:fa:1c:eb:72
rmnet4   DOWN                                   0.0.0.0/0   0x00001002 22:b1:e0:19:a5:b6
rmnet5   DOWN                                   0.0.0.0/0   0x00001002 3a:4c:55:9d:3e:27
rmnet6   DOWN                                   0.0.0.0/0   0x00001002 9a:d9:85:90:96:42
rmnet7   DOWN                                   0.0.0.0/0   0x00001002 96:8e:a3:31:c8:09
tunl0    DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
sit0     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
ip6tnl0  DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
wlan0    UP                               10.247.36.185/21  0x00001043 48:28:2f:f9:b9:09
  • 查看設備的路由表 — /proc/net/route 和 ip route

(一) 從 /proc/net/route 查看路由表:

$ adb shell cat /proc/net/route
Iface	Destination	Gateway 	Flags	RefCnt	Use	Metric	Mask		MTU	Window	IRTT
wlan0	00000000	0120F70A	0003	0	0	0	00000000	0	0	0
wlan0	0020F70A	00000000	0001	0	0	313	00F8FFFF	0	0	0

(二) 或用以下方式安裝 ip 工具(相關的執行檔可從原始的 Android device 中取得,也可自行編譯):

adb push system/bin/ip /system/bin/.
adb push system/lib/libiprouteutil.so /system/lib/.
adb push system/lib/libnetlink.so /system/lib/.
adb shell chmod 755 /system/bin/ip

用 ip route 可看到解讀後的路由表:

$ adb shell ip route
default via 10.247.32.1 dev wlan0 
10.247.32.0/21 dev wlan0  proto kernel  scope link  src 10.247.36.185  metric 313
  • 查看各個網路介面的封包收送統計 — /proc/net/dev 和 /sys/class/net//statistics/*

(一) 從 /proc/net/dev 查看所有封包統計:

$ adb shell cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:   63288      34    0    0    0     0          0         0    63288      34    0    0    0     0       0          0
rmnet0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet1:       0       0    0    0    0     0          0         0        0       0    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
 tunl0:       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
ip6tnl0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
 wlan0: 2382768   11214    0    0    0     0          0         0   103725    2753    0    0    0     0       0          0

(二) 從 /sys/class/net/網路介面/statistics/* 查看特定個網路介面統計數據。

3G:
adb shell cat /sys/class/net/rmnet0/statistics/rx_bytes
adb shell cat /sys/class/net/rmnet0/statistics/tx_bytes

Wifi:
adb shell cat /sys/class/net/wlan0/statistics/rx_bytes
adb shell cat /sys/class/net/wlan0/statistics/tx_bytes
  • 定時自動更新資料 — watch

在 PC 端使用 watch 命令可定時自動更新要查看的資料,參數 -n1 表示每秒更新一次。這個命令對於觀察網路介面資訊動態變化狀況很好用。

watch -n1 adb shell netcfg
或是
watch -n1 adb shell cat /proc/net/dev
  • 分析網路封包

(一) 分析網路封包前,在 device 和 PC 端分別需要安裝的工具如下:

1. Device 端:安裝 nc 和 tcpdump (相關的執行檔可從原始的 Android device 中取得,也可自行編譯)

adb remount
adb push system/xbin/nc /system/xbin/.
adb push system/xbin/tcpdump /system/xbin/.
adb shell chmod 755 /system/xbin/tcpdump
adb shell chmod 755 /system/xbin/nc

2. PC 端:安裝 wireshark

sudo apt-get install wireshark

(二) 使用方式:

1. 開一個視窗執行 tcpdump:

adb shell "/system/xbin/tcpdump -n -s 0 -w - | /system/xbin/nc -l -p 12345"

2. 開另一個視窗執行 wireshark:

adb forward tcp:12345 tcp:12345 && nc 127.0.0.1 12345 | wireshark -k -S -i -
  • 當建立 Wifi 或 3G 連線有問題時,可以用以下方式打開 log,並用 adb logcat 進一步分析連線無法建立的原因。

(一) 打開 RIL log,分析 3G 連線:

adb pull /system/b2g/defaults/pref/user.js
# 將 user.js 中的 "ril.debugging.enabled" 設成 true
adb remount
adb push user.js /system/b2g/defaults/pref/user.js
adb shell stop b2g
adb shell start b2g

分析 3G 連線的 log,通常會搭配 adb logcat 和 adb logcat -b radio。

(二) 打開 Wifi log,分析 Wifi 連線:

Wifi log 要先將 device 中的下面項目打勾,然後就可以用 adb logcat 分析:
Settings App -> Device Information -> More Information -> Developer -> Wi-Fi output in adb

  • 查看 HTTP log

以下方式可以將 Firefox OS 相關的 HTTP traffic 記錄到 device 上的 log 檔。

adb shell
export NSPR_LOG_MODULES=timestamp,nsHttp:5,nsSocketTransport:5,nsHostResolver:5
export NSPR_LOG_FILE=/data/local/tmp/myLogFile
stop b2g
/system/bin/b2g.sh
  • 參考資料

[1] Debugging with tcpdump and other tools
[2] HTTP logging on a Firefox OS