我想捕获从 HostA 到 HostB 的 HTTP 服务调用,以测试 HostA 上的客户端以替换 HTTP 响应。两个操作系统都是 Linux。我尝试了以下方法但失败了。推荐的方法是什么?
我想使用透明代理模式,因为我无法修改客户端,也无法将所有流量从 HostA 重定向到 hostB,因为 HostA 上还运行着其他服务。我只想将客户端的连接从主机 A 重定向到主机 B。主机 A 中的客户端通过 HTTP 在某个端口 10001 上调用主机 B 上的服务。
我尝试使用 mitmproxy 设置 HostC(HostA 和 HostC 在同一个子网中)HostA(ip_A)-> HostC(ip_C)和 mitmproxy-> HostB(ip_B),我设置了 ip 表来构建透明模式。
以下是我在 HostA 上的设置
sudo iptables -t mangle -I OUTPUT -p tcp --dport 10001 -j MARK --set-mark 1
sudo ip route add default via ip_C table 100
sudo ip rule add fwmark 0x1 table 100
在 HostC 上
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -o eth0 -p tcp --dport 10001 -j REDIRECT --to-port 8080
mitmproxy -T --host
这不起作用。HostA 上的客户端连接超时。如果我尝试在 HostA 上进行跟踪路由
traceroute ip_B -p 10001 -T
它显示 ip_B 在 TCP 上无法从 HostA 访问
我也尝试在 HostA 上设置 mitmproxy,但是当我尝试重定向 HostA 上端口 10001 的流量时
sudo iptables -t nat -A OUTPUT -p tcp --dport 10001 -j REDIRECT --to-port 8080
mitmproxy -T --host
该服务调用可以被 HostA 上的 mitmproxy 捕获,但无法获得响应。
非常感谢你的帮助。
答案1
也许 - 一旦数据包到达 MITM 服务器,它就会转到端口 8080 - 但 HOST_A Web 服务器仍在 10001 - 所以你不需要再执行一次 IPTABLES 来将其恢复到 10001 吗?我认为你在这方面比我强,但我猜
sudo iptables -t nat -A OUTPUT -p tcp --dport 8080 -j REDIRECT --to-port 10001
会这样做