Android实时抓包分析 : 善用adb调试桥
谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump。方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包记录到本地,再把抓到的.cap文件导到pc上面用wireshark来分析。这里步骤非常多,在和后台联调的时候,这个效率是非常低的。
能不能在android上面启动抓包,然后直接在pc端看到实时抓包结果?
有了adb调试桥,我们就可以做到这么便捷。
一、准备工具:
1、android 系统root
2、android上安装tcpdump
3、android上安装netcat,可以直接使用busybox的版本
4、pc的wireshark的安装目录下需要有nc客户端
5、把android手机和pc通过usb调试连接上
二、命令:
1、android上先执行:
/data/tcpdump-arm -n -s 0 -w - | nc -l -p 11234
* 11234是示例,端口可以自己定
2、pc上启动adb forward:
adb forward tcp:11234 tcp:11234 && nc64 127.0.0.1 11234 | wireshark -k -S -i -
* 这里的11234要和前面启用11234要保持一致
3、如果抓包成功,那么pc端的wireshark是自动启动的,并且可以看到网络包
三、实现原理:
关键的逻辑在adb forward这个命令,这个命令实现了端口映射的功能:
Forwarding Ports
You can use the forward command to set up arbitrary port forwarding — forwarding of requests on a specific host port to a different port on an emulator/device instance. Here's how you would set up forwarding of host port 6100 to emulator/device port 7100:
adb forward tcp:6100 tcp:7100
You can also use adb to set up forwarding to named abstract UNIX domain sockets, as illustrated here:
adb forward tcp:6100 local:logd
谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump。方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包记录到本地,再把抓到的.cap文件导到pc上面用wireshark来分析。这里步骤非常多,在和后台联调的时候,这个效率是非常低的。
能不能在android上面启动抓包,然后直接在pc端看到实时抓包结果?
有了adb调试桥,我们就可以做到这么便捷。
一、准备工具:
1、android 系统root
2、android上安装tcpdump
3、android上安装netcat,可以直接使用busybox的版本
4、pc的wireshark的安装目录下需要有nc客户端
5、把android手机和pc通过usb调试连接上
二、命令:
1、android上先执行:
/data/tcpdump-arm -n -s 0 -w - | nc -l -p 11234
* 11234是示例,端口可以自己定
2、pc上启动adb forward:
adb forward tcp:11234 tcp:11234 && nc64 127.0.0.1 11234 | wireshark -k -S -i -
* 这里的11234要和前面启用11234要保持一致
3、如果抓包成功,那么pc端的wireshark是自动启动的,并且可以看到网络包
三、实现原理:
关键的逻辑在adb forward这个命令,这个命令实现了端口映射的功能:
Forwarding Ports
You can use the forward command to set up arbitrary port forwarding — forwarding of requests on a specific host port to a different port on an emulator/device instance. Here's how you would set up forwarding of host port 6100 to emulator/device port 7100:
adb forward tcp:6100 tcp:7100
You can also use adb to set up forwarding to named abstract UNIX domain sockets, as illustrated here:
adb forward tcp:6100 local:logd