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