Có bất kỳ dòng lệnh HTTP chung chung nào (như Squid) không?


9

Tôi có thể dễ dàng sử dụng Netcat (hoặc, Socat) để nắm bắt lưu lượng giữa trình duyệt của tôi và một máy chủ lưu trữ cụ thể: cổng.

Nhưng đối với Linux, có tồn tại bất kỳ đối tác dòng lệnh nào của proxy HTTP giống như Squid mà tôi có thể sử dụng để nắm bắt lưu lượng giữa máy khách HTTP của mình (trình duyệt hoặc chương trình dòng lệnh) và bất kỳ máy chủ tùy ý nào không: cổng?


Câu trả lời:


8

Cả Perl và Python (và có lẽ cả Ruby nữa) đều có các bộ công cụ đơn giản mà bạn có thể sử dụng để nhanh chóng xây dựng các proxy HTTP đơn giản.

Trong Perl, sử dụng HTTP :: Proxy . Đây là ví dụ 3 dòng từ tài liệu. Thêm bộ lọc để lọc, ghi nhật ký hoặc viết lại yêu cầu hoặc phản hồi; xem tài liệu cho ví dụ.

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

Trong Python, sử dụng SimpleHTTPServer . Đây là một số mã mẫu được điều chỉnh nhẹ từ effbot . Điều chỉnh do_GETphương thức (hoặc các phương thức khác) để lọc, ghi nhật ký hoặc viết lại các yêu cầu hoặc phản hồi.

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

Tôi tin rằng đây chính xác là loại giải pháp tôi đang tìm kiếm. Cảm ơn.
Harry

Python đã làm việc cho tôi đối với các yêu cầu HTTP nhưng dường như nó không hỗ trợ các yêu cầu HTTPS.
Russell Silva


6

Đây có thể không phải là giải pháp tốt nhất, nhưng nếu bạn sử dụng bất kỳ proxy nào thì nó sẽ có một giải pháp cụ thểhost:port giải pháp để netcat vẫn hoạt động, mặc dù bạn sẽ phải tách dữ liệu meta proxy để hiểu ý nghĩa của nó.

Cách dễ nhất để làm điều này có thể là sử dụng bất kỳ proxy ẩn danh ngẫu nhiên nào ngoài đó và chỉ kênh tất cả lưu lượng truy cập thông qua netcat. (Tức là, đặt proxy trình duyệt của bạn thànhlocalhost:port và sau đó chuyển tiếp dữ liệu đến proxy thực.)

Nếu bạn muốn có proxy cục bộ thì proxy SOCKS5 với ssh -D <port> localhost có lẽ là tùy chọn dễ nhất của bạn. Rõ ràng, bạn cần yêu cầu trình duyệt của mình sử dụng proxy "vớ" thay vì proxy "http".

Vì vậy, một cái gì đó như thế này (giả sử máy cục bộ của bạn chấp nhận các kết nối ssh đến):

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

Đương nhiên, điều đó sẽ chỉ hoạt động cho một lần thử kết nối trình duyệt, sau đó thoát và tôi không cố chuyển tiếp dữ liệu trả về trình duyệt, vì vậy bạn sẽ cần netcatgiải pháp đầy đủ của bạn .


Cảm ơn. Bạn có bất kỳ đề xuất tên cho proxy ẩn danh cho Linux? Tôi thích những con không nặng như Squid (về kích thước, bộ nhớ, tốc độ khởi động), có thể bắt đầu bởi một rootngười không sử dụng, v.v.
Harry

Ngoài ra, tôi đã không làm theo ví dụ proxy SOCKS5 của bạn. Bạn có thể vui lòng giải thích những gì đang xảy ra với 2 yêu cầu ở trên? Tôi, ví dụ biết rằng ssh -fN -D ...bắt đầu proxy SOCKS5 trên localhostcổng 8000, nhưng nc -l ...làm gì? Và, tôi nên đưa trình duyệt của mình tới cổng nào: 8000hoặc 8080?
Harry

2
@harry cho một proxy anomyzation có một cái nhìn về privateoxy
Ulrich Dangel

1
Khi tôi nói "proxy ẩn danh", tôi không có ý gì bạn tự thiết lập: Tôi có nghĩa là một proxy hiện có trên mạng. @UlrichDangel gợi ý privateoxy và tôi chắc chắn cũng có những người khác.
am

Các nclệnh chấp nhận tất cả lưu lượng truy cập từ cổng 8080 và chuyển tiếp đến 8000. Tôi không cung cấp netcatgiải pháp đầy đủ vì bài đăng của bạn cho thấy bạn đã biết cách thực hiện phần đó.
am
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.