簡體   English   中英

Perl透明代理

[英]Perl transparent proxy

我正在嘗試創建一個透明的HTTP代理 它的目的是在瀏覽器和Web服務器之間保持不變。 這是我正在使用的代碼。 不幸的是,它的效果不佳。 當我打開網頁(由$base_uri引用)時,根據我是否僅使用瀏覽器或瀏覽器和代理打開它,會有不同的結果。 我正在一個網站上嘗試它,它返回各種響應,包括“ transfer-encoding: chunked ”(所以我想可能是問題可能在那里?!)。 我認為cookie也可能存在問題,但我不知道如何解決它們(如果有的話......)。

#!/usr/bin/perl

use strict;

use HTTP::Daemon;
use LWP::UserAgent;
use HTTP::Cookies;

my $cookie_jar = HTTP::Cookies->new();

my $ua = LWP::UserAgent->new( max_redirect => 0, env_proxy => 0,keep_alive => 1, timeout => 30, agent => "Mozilla/4.76 [en] (Win98; U)");
my $d = HTTP::Daemon->new( 
    LocalHost => "localhost",  # remove this to listen from other machines 
                   # (i.e. open-relay... be careful of spammers!)
    LocalPort => 33331
) || die;
print "[Proxy URL:", $d->url, "]\n";

fork(); fork(); fork();  # 2^3 = 8 processes

$ua->cookie_jar($cookie_jar);

my $base_uri = 'http://example.com/';

while (my $c = $d->accept) {
        while (my $request = $c->get_request) {
            my $uri = $base_uri . $request->uri->as_string();
            my $method = $request->method;
            my $req = HTTP::Request->new($method, $uri);

            $request->uri($uri);

            print "[[ $method >> $uri ]]\n";
            my $response = $ua->simple_request($request);
            $c->send_response( $response );
        }
    $c->close;
    undef($c);
}

先感謝您!

目前尚不清楚,你真正想要的是什么。 你應該更好地描述它。 如果您描述了您需要該代理的內容和原因以及它需要哪些功能,那么任何幫助都可以更好。 不過我會試試。

您目前所做的是獲取傳入連接,提取URI和調用方法並將其傳遞給您的源。 好吧,HTTP要復雜得多 - 您可以刪除所有傳輸數據(例如POST請求)以及所有標題行(cookie,登錄數據,瀏覽器標識,語言規范......),這些通常包含重要信息。 你也經常修改時序行為。 然后,您將其發送到您的代理目標。

現在您接受服務器答案並再次刪除所有相關內容。 此外,您只需在答案完成后回復。 對於流數據,這將不起作用(您已經提到了分塊傳輸模式)。 此外,您的方法需要大量內存用於大型文件(例如DVD映像 - 4GB)。

沒有關於您的應用程序的進一步細節,沒有真正的建議,但一些想法:

a)正如評論中所說,有可用的Perl模塊。 您可以測試它們,看它們是否符合您的需求。

b)你可以降低水平。 使用IO::Socket::INETINET6並直接在套接字級別上工作。 將每個數據包直接發送到輸出。 這幾乎是100%透明的(IP地址和TCP數據包大小除外)。 如果您想要更改或檢查數據,您需要自己關心HTTP,這在當今可能非常復雜(特別是由於傳輸編碼)。

c)也許不自己編碼,但使用現有的代理(例如Apache網絡服務器或特定的代理程序)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM