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

Har*_*rry 10 command-line proxy http squid

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

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

Gil*_*il' 9

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

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

use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;
Run Code Online (Sandbox Code Playgroud)

在 Python 中,使用SimpleHTTPServer。这是一些从effbot轻微改编的示例代码。调整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()
Run Code Online (Sandbox Code Playgroud)


ams*_*ams 6

这可能不是最好的解决方案,但如果您使用任何代理,那么它将有一个特定的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
Run Code Online (Sandbox Code Playgroud)

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

  • @harry 的匿名化代理看看 privoxy (2认同)