Прозрачный режим MITMProxy не работает
Я пытаюсь использовать MITMproxy в прозрачном режиме. У меня есть две машины:
- Одна машина с Linux, на которой я запускаю MITMProxy.
- Одно встроенное устройство 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
Затем я попытался подключиться кhttp://www.cs.sjsu.edu
на порту 80 (хост, который я нашел в Интернете с IPv4 по http) с обоимиnetcat
и браузер Android.
я вижу сtcpdump
на Android и Linux пакеты перенаправляются, но в 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 по-прежнему ничего не появляется, и соединение не устанавливается.
Что мне не хватает? Спасибо!