是否有任何命令行、通用 HTTP 代理(如 Squid)?

是否有任何命令行、通用 HTTP 代理(如 Squid)?

我可以轻松地使用 Netcat(或 Socat)捕获浏览器和特定主机:端口之间的流量。

但对于 Linux,是否存在类似 Squid 的 HTTP 代理的命令行对应项,我可以使用它来捕获我的 HTTP 客户端(浏览器或命令行程序)与任意主机:端口之间的流量?

答案1

Perl 和 Python(可能还有 Ruby)都有简单的工具包,您可以使用它们来快速构建简单的 HTTP 代理。

在 Perl 中,使用HTTP::代理。这是文档中的 3 行示例。添加过滤器来过滤、记录或重写请求或响应;请参阅文档中的示例。

use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;

在Python中,使用简单HTTP服务器。这是一些稍微改编自的示例代码效果机器人。调整do_GET方法(或其他方法)来过滤、记录或重写请求或响应。

import SocketServer
import SimpleHTTPServer
import urllib
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen(self.path), self.wfile)
httpd = SocketServer.ForkingTCPServer(('', 3128), Proxy)
httpd.serve_forever()

答案2

这可能不是最好的解决方案,但如果您使用任何代理,那么它将有一个特定的host:port,因此 netcat 解决方案仍然有效,尽管您必须拆开代理元数据才能理解它。

最简单的方法可能是使用任何随机匿名代理并通过 引导所有流量netcat。 (即将浏览器代理设置为localhost:port,然后将数据转发到真实代理。)

如果您想拥有本地代理,那么 SOCKS5 代理ssh -D <port> localhost可能是您最简单的选择。显然,您需要告诉浏览器使用“socks”代理而不是“http”代理。

所以,像这样(假设您的本地计算机接受传入的 ssh 连接):

ssh -fN -D 8000 localhost
nc -l 8080 | tee capturefile | nc localhost 8000

当然,这仅适用于一次浏览器连接尝试,然后退出,并且我没有尝试将返回数据转发到浏览器,因此您需要完整的netcat解决方案。

答案3

https://mitmproxy.org/

一个例子:

mitmdump  --ssl-insecure --mode reverse:google.com

相关内容