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


9

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

但是对于Linux,是否存在类似Squid的HTTP代理的任何命令行副本,我可以用来捕获HTTP客户端(浏览器或命令行程序)与任意host:port之间的流量?


Answers:


8

Perl和Python(可能还有Ruby)都有简单的工具包,可用于快速构建简单的HTTP代理。

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

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

在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()

我相信这正是我所寻找的解决方案。谢谢。
哈利

Python可以为我处理HTTP请求,但它似乎不支持HTTPS请求。
罗素·席尔瓦


6

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

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

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

因此,如下所示(假设您的本地计算机接受传入的ssh连接):

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

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


谢谢。您对Linux的匿名代理有什么建议吗?我宁愿那些不属于重量级鱿鱼(大小,内存,启动速度方面),是启动的由非root用户等
哈利

另外,我没有遵循您的SOCKS5代理示例。您能否解释一下以上2个调用的状态?我,例如,知道ssh -fN -D ...localhostport 上启动SOCKS5代理8000,但是怎么nc -l ...办?并且,我应将浏览器指向哪个端口:80008080
哈利

2
@harry的anomyzation代理看看privoxy
Ulrich Dangel 2012年

1
当我说“匿名代理”时,我并不是说您要自己设置:我是指网络上已有的代理。@UlrichDangel建议使用privoxy,我敢肯定还有其他人。
2012年

这些nc命令接受来自端口8080的所有流量并将其转发到8000。我没有提供完整的netcat解决方案,因为您的帖子建议您已经知道如何执行此操作。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.