MITMProxy 透明模式不起作用

MITMProxy 透明模式不起作用

我正在尝试以透明模式使用 MITMproxy。我有两台机器:

  • 我运行 MITMProxy 的一台 Linux 机器
  • 我想要透明地重定向一个 Android 嵌入式设备的流量

为了简单起见,我现在只关注 IPv4 和 HTTP。而不是 TLS 或 IPv6。

在 Linux 上我运行 MITMProxy

mitmproxy --mode transparent --showhost

在 Android 上我运行过

adb shell sysctl -w net.ipv4.ip_forward=1
adb shell sysctl -w net.ip4.conf.all.send_redirects=0
adb shell iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination $IP_LINUX:8080

目的是将所有流向端口 80 的流量重定向到我的 Linux 机器上的端口 8080,即 mitmproxy 默认监听的端口。

adb shell iptables -t nat -L --line-numbers
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    oem_nat_pre  all  --  anywhere             anywhere            

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  anywhere             anywhere             tcp dpt:http to:192.168.2.123:8080

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    tetherctrl_nat_POSTROUTING  all  --  anywhere             anywhere            

Chain oem_nat_pre (1 references)
num  target     prot opt source               destination         

Chain tetherctrl_nat_POSTROUTING (1 references)
num  target     prot opt source               destination     

然后我尝试使用android 浏览器连接到http://www.cs.sjsu.edu端口 80(我在网上通过 http 找到的使用 IPv4 的主机) 。netcat

我可以在 Android 和 Linux 上看到tcpdump数据包被重定向,但是在 MITProxy 中我看不到任何内容,并且连接网站仍然失败。

ping www.cs.sjsu.edu
PING cos-cwebwebster.sjsu.edu (130.65.255.57) 56(84) bytes of data.

--- cos-cwebwebster.sjsu.edu ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

adb shell nc 130.65.255.57 80

使用 tcpdump 我可以看到重定向的数据包

在 Android 上

adb shell tcpdump -l -nn dst $IP_LINUX and dst port 8080
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes
10:30:17.513892 IP 192.168.2.101.47970 > 192.168.2.123.8080: Flags [S], seq 1827135764, win 65535, options [mss 1460,sackOK,TS val 368320 ecr 0,nop,wscale 9], length 0
10:30:17.514078 IP 192.168.2.101.47968 > 192.168.2.123.8080: Flags [S], seq 2479685048, win 65535, options [mss 1460,sackOK,TS val 368320 ecr 0,nop,wscale 9], length 0
10:30:17.514296 IP 192.168.2.101.47966 > 192.168.2.123.8080: Flags [S], seq 1020904415, win 65535, options [mss 1460,sackOK,TS val 368320 ecr 0,nop,wscale 9], length 0

在 Linux 上

sudo tcpdump -i any -l -nn src $IP_ANDROID and dst port 8080
tcpdump: data link type LINUX_SLL2
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
10:30:17.577226 wlp65s0 In  IP 192.168.2.101.47970 > 192.168.2.123.8080: Flags [S], seq 1827135764, win 65535, options [mss 1460,sackOK,TS val 368320 ecr 0,nop,wscale 9], length 0
10:30:17.578696 wlp65s0 In  IP 192.168.2.101.47968 > 192.168.2.123.8080: Flags [S], seq 2479685048, win 65535, options [mss 1460,sackOK,TS val 368320 ecr 0,nop,wscale 9], length 0

但 MITMProxy 上仍然没有显示任何内容,并且连接失败。

我遗漏了什么?谢谢!

答案1

您希望在流量到达 Linux 网络进程之前对其进行 nat。您的 nat 语句位于 OUTPUT 链上,位于之后。

https://docs.mitmproxy.org/stable/howto-transparent/

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

您还可以在 android 主机 IP 上执行 tcpdump,而不是 src/and 端口。然后您也可以监控返回流量。(tcpdump -l -nn host 1.2.3.4)

答案2

您需要确认几件事;

  1. 您的 Linux(MITM 主机)已启用 IP 转发(或通过它进行路由)。
  2. 你期望 Android 盒子所在的 IP 地址/子网最好位于同一子网中
  3. 通过 DHCP 或静态 IP 地址配置,将您的 Android 盒默认网关指向 Linux 盒 IP 地址。

像这样:

[Android 10.1.1.2/24,默认网关 = 10.1.1.1] --> WLAN AP | LAN 电缆 -> <--- [linux inside eth0 10.1.1.1/24,默认网关你的互联网路由器/pppoe] --> 互联网

https://docs.mitmproxy.org/stable/howto-transparent/

确保按照那里的步骤启用 IP 转发和预 nat。

相关内容