Some Notes

Tcp dump 抓包分析App中ipv4、ipv6流量

first of all,首先需要一部root过的手机,不然不支持tcp dump的方式抓包。

进入adb shell,输入 su root,获取 root 权限后,在 data/system/packages.xml 中搜索你需要抓包 app 的包名,找到对应的uid,因为我们需要根据uid来过滤需要抓包的应用下的数据包,以下以”12141″为uid举例。

注意DNS解析的包无法按uid来区分,我们直接全局抓取,DNS解析包只用来获取域名-ip的对应关系,不会影响HTTP和TCP的数据包。

###数据包过滤 抓包前使用iptables来过滤应用对应uid的所有数据包,命令如下

#把OUTPUT数据包里面,用户ID是12141的流打上12141的流标签
iptables -A OUTPUT -m owner --uid-owner 12141 -j CONNMARK --set-mark 12141
ip6tables -A OUTPUT -m owner --uid-owner 12141 -j CONNMARK --set-mark 12141
 
#把入站流中带有10012标签的数据包放到nflog消息池中,消息池的标号为12141
iptables -A INPUT -m connmark --mark 12141 -j NFLOG --nflog-group 12141
ip6tables -A INPUT -m connmark --mark 12141 -j NFLOG --nflog-group 12141
 
#把出站流中带有12141标签的数据包放到nflog消息池中,消息池的标号为12141
iptables -A OUTPUT -m connmark --mark 12141 -j NFLOG --nflog-group 12141
ip6tables -A OUTPUT -m connmark --mark 12141 -j NFLOG --nflog-group 12141
 
#捕获53端口的DNS解析包(用来把ip转化为对应的域名)
iptables -A INPUT -p udp --sport 53 -j NFLOG --nflog-group 12141
iptables -A OUTPUT -p udp --sport 53 -j NFLOG --nflog-group 12141
iptables -A INPUT -p tcp --sport 53 -j NFLOG --nflog-group 12141
iptables -A OUTPUT -p tcp --sport 53 -j NFLOG --nflog-group 12141
 
ip6tables -A INPUT -p udp --sport 53 -j NFLOG --nflog-group 12141
ip6tables -A OUTPUT -p udp --sport 53 -j NFLOG --nflog-group 12141
ip6tables -A INPUT -p tcp --sport 53 -j NFLOG --nflog-group 12141
ip6tables -A OUTPUT -p tcp --sport 53 -j NFLOG --nflog-group 12141
 
#查看iptables规则
iptables -L INPUT --line-numbers
iptables -L OUTPUT --line-numbers
ip6tables -L INPUT --line-numbers
ip6tables -L OUTPUT --line-numbers
 
#清理规则
iptables -F
ip6tables -F
 
#开始抓包
tcpdump -i nflog:12141 -s 0 -v -w uid-12141.pcap

抓包结束时,使用command+c退出抓包,找到pcap文件保存到PC,并使用WireShark来打开pcap文件。

###结果分析 如果想看其中的一个请求,可以 Follow 一下 HTTP Stream。