代理操作方式
一、操作方式
- 常规(默认)
- 透明
- 反向代理
- 上游代理
- Socks代理 现在,您应该选择哪一个?使用此流程图:
二、常规代理
Mitmproxy
的常规模式是最简单,最容易设置的。
- 启动
mitmproxy
。 - 通过显式设置
HTTP
代理,将客户端配置为使用mitmproxy
。缺省情况下,mitmproxy
侦听端口8080
。 - 快速检查:您应该已经可以通过代理访问未加密的
HTTP
站点。 - 打开
mitm.it
并为您的设备安装证书。
不幸的是,某些应用程序绕过了系统
HTTP
代理设置-Android
应用程序是一个常见的示例。在这些情况下,您需要使用mitmproxy
的透明模式。 如果您要代理外部设备,则您的网络可能看起来像这样:
方括号表示源IP地址和目标IP地址。您的客户端显式连接到mitmproxy,而mitmproxy显式连接到目标服务器。
三、透明代理
在透明模式下,无需任何客户端配置即可将流量定向到网络层的代理中。这使得透明代理非常适合您无法更改客户端行为的情况。在下图中,在路由器和Internet之间
插入了运行mitmproxy
的计算机:
方括号表示源IP地址和目标IP地址。圆括号标记了以太网/数据链路层上的下一跳。这种区别很重要:当数据包到达mitmproxy机器时,仍必须将其寻址到目标服务器。这意味着在流量到达mitmproxy之前不应该应用网络地址转换,因为这会删除目标信息,从而使mitmproxy无法确定真实的目的地。
1、常用配置
有多种方法可以配置网络以实现透明代理。我们将看两种常见的情况:
- 配置客户端以使用自定义网关/路由器/“next hop”
- 在路由器上实现自定义路由
- 在大多数情况下,建议使用第一个选项,因为它易于使用。
(a)自定义网关
一种简单地将流量发送到具有目标IP的mitmproxy机器的方法是,简单地将mitmproxy框配置为默认网关的客户端。
在这种情况下,我们将:
- 将代理计算机配置为透明模式。您可以在透明部分中找到说明。
- 配置客户端以使用代理计算机的IP作为默认网关。
- 快速检查:至此,您应该已经可以通过代理访问未加密的HTTP站点。
- 打开 mitm.it 并为您的设备安装证书。
通过在DHCP上将设置提供给客户端,可以自动在客户端上设置自定义网关。这样就可以建立一个拦截网络,在该网络中自动代理所有客户端,从而节省时间和精力。
对透明模式进行故障排除
错误的透明模式配置是常见的错误来源。如果它不适合您,请尝试以下操作:
打开mitmproxy的事件日志-您是否看到clientconnect消息?如果不是,则数据包未到达代理。一个常见的原因是ICMP重定向的发生,这意味着您的计算机通过直接与路由器联系来告诉客户端有一种更快的Internet途径(请参阅透明部分以了解如何禁用它们)。如有疑问, Wireshark可以帮助您查看是否有东西到达您的计算机。 确保尚未在客户端上显式配置HTTP代理。在透明模式下不需要。 重新检查透明部分中的说明。你错过了什么吗? 如果您遇到其他应在此处列出的陷阱,请告诉我们!
(b)自定义路由
在某些情况下,您可能需要更精细地控制哪些流量到达mitmproxy
实例,而哪些流量没有。例如,您可以选择仅将流量转移到某些主机到透明代理中。有很多方法可以完成此操作,并且很多方法都取决于您使用的路由器或数据包筛选器。在大多数情况下,配置如下所示:
四、反向代理
mitmproxy
通常与使用代理访问Internet
的客户端一起使用。使用反向代理模式,可以使用mitmproxy
充当普通的HTTP
服务器:
有各种用例:
- 假设您有一个运行在http://example.local/的内部API 。现在,您可以在http://debug.example.local/处以反向代理模式设置mitmproxy,并将客户端动态指向该新的API端点,该端点将为它们提供相同的数据,并为您提供调试信息。同样,您可以将真实服务器移动到其他IP /端口,并在原始位置设置mitmproxy来调试和/或重定向所有会话。
- 假设您是使用http://example.com/的Web开发人员(开发版本在http:// localhost:8000 /上运行)。您可以修改主机文件,以使example.com指向127.0.0.1,然后在反向代理模式下在端口80上运行mitmproxy。您可以在example.com域上测试您的应用,并获取记录在mitmproxy中的所有请求。 假设您有一些玩具项目应该获得SSL支持。只需在端口443上将mitmproxy设置为反向代理,就可以完成(mitmdump -p 443 --mode reverse:http://localhost:80/)。Mitmproxy自动检测TLS流量并动态拦截。对于此特定任务,有更好的工具,但是mitmproxy是设置SSL会话服务器的非常快速和简单的方法。
- 是否想在服务器前添加不支持SSL的压缩代理?您甚至可以生成一个终止SSL(--mode reverse:http://...)的mitmproxy实例,将其指向压缩代理,然后让压缩代理指向一个SSL启动的mitmproxy(--mode reverse:https://...),然后再指向真实服务器。如您所见,这是相当灵活的事情。
1、主机头
在反向代理模式下,mitmproxy会自动重写Host标头以匹配上游服务器。这使mitmproxy可以轻松连接到开放Web上的现有端点(例如mitmproxy --mode reverse:https://example.com)。您可以使用该keep_host_header选项禁用此行为。
但是,请记住,mitmproxy不会重写返回的文档或HTTP重定向中的绝对URL。这意味着,如果您在返回的网页中单击“ http://example.com ”的链接,则将绕过mitmproxy直接进入该URL。
解决此问题的一种可能方法是修改操作系统的主机文件,以便“ example.com”解析为代理的IP,然后直接转到example.com来访问代理。确保您的代理仍然可以解析原始IP,或在mitmproxy中指定IP。
注意事项:互动使用 反向代理模式通常不足以在其他URL上创建交互式网站的副本。提供给客户端的HTML保持不变-用户单击非相对URL(或下载非相对图像资源)后,流量不再通过mitmproxy。
上游代理
如果要通过在其他代理设备之前添加mitmproxy来链接代理,则可以使用mitmproxy的上游模式。在上游模式下,所有请求都会无条件转移到您选择的上游代理中。
mitmproxy在上游代理模式下支持显式HTTP和显式HTTPS。从理论上讲,您可以连续链接多个mitmproxy实例,但这在实践中没有任何意义(即在我们的测试范围之外)。
Socks代理
在这种模式下,mitmproxy充当SOCKS5代理。