在Android 应用中,使用tcpdump 命令抓取系统日志
Runtime.getRuntime().exec
("busybox timeout -t 10 /system/xbin/tcpdump -i eth0 -s 0 -w /sdcard/test.pcap -W 1")
不出意外会报如下错误:
tcpdump: eth0: You don't have permission to capture on that device
tcpdump使用raw socket,需要进程在net_raw组,android并未将net_raw与任何权限关系,需修改platform.xml将net_raw组置于android.permission.NET_ADMIN权限之下。
1.frameworks/base/data/etc/platform.xml 增加如下权限:
<permission name="android.permission.NET_ADMIN" >
<group gid="net_admin" />
<group gid="net_raw" />
</permission>
2.应用的AndroidManifest.xml 中加入
<uses-permission android:name="android.permission.NET_ADMIN" />
另外,系统中如果没有tcpdump 命令,还需要将tcpdump 加入编译选项,编译到ROM中
# tcpdump
PRODUCT_PACKAGES += \
tcpdump