獨家密技傳授,Firefox OS 分析網路問題工具!
在使用 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