2012-02-25 22 views
1

次のコードを使用してサーバーに接続するスクリプトがあります。perl UserAgentを使用したソケット接続

$sock = new IO::Socket::INET (
            PeerAddr => $server, 
            PeerPort => $port, 
            Proto => 'tcp', 
           ); 

ただし、私はプロキシサーバーの背後にあり、このスクリプトは使用できません。これを克服するために、プロキシサポートを追加する必要があります。 SOの提案はUserAgentを使用することでした。私はPerlの文盲者なので、このコードをUserAgentを使用するものに置き換える方法がわかりません。私はコードの残りの部分に触れたくありません。 を使用して$sockを再定義して、スクリプト作業ファイルにすることはできますか。私が話しているスクリプトは利用可能ですhere

+0

ちょっと今、解決策はありますか? –

答えて

1

"UserAgent"というモジュールはあなたが参照しているか分かりません。その名前のモジュールはありません。名前の一部としてUserAgentを持つ多くのモジュールがありますが、あなたの状況に該当するものはわかりません。

とにかく、私はあなたがIO::Socket::Socksを探していると思います。私は自分で試したことはありませんが、あなたはできるはずです:

use IO::Socket::Socks; 

my $sock = IO::Socket::Socks->new(
    ProxyAddr => $hostname_of_your_proxy, 
    ProxyPort => $port_number_your_proxy_listens_on, 
    ConnectAddr => $server, 
    ConnectPort => $port, 
); 

残りのコードはそのままのままにしておきます。

+0

プロキシ認証のユーザー名とパスワードについて心配する必要はありますか?また、pingコマンドは 'moss.stanford.edu'からの応答を得ません。あなたの解決策を実行すると、 'サーバに接続できませんでした。moss.stanford.edu:不正な検索' – Dilawar

+0

あなたのプロキシが認証を要求している場合は、 'Username'と' Password'属性も指定する必要がありますおそらく 'AuthType'でも、わかりません)。 – cjm

0

私はthis discussionを参照していたと思いますか?しかし、あなたがリンクしたスクリプトのように、HTTPサーバからいくつかのファイルをリモートから取得すること(このLWP :: UserAgentは実際にはより関連性があります)とIO :: Socket(:: INET)を介してファイルを送信することに違いがあります。

あなたが提供する優れたソリューションのCJMを使用するか、ちょうどそのよう、socatを使用することがあります。

socat TCP4-LISTEN:9999 TCP4:moss.stanford.edu:7690 

... 9999は、ローカルプロキシポートを指します。良い:あなたは苔のスクリプトを変更する必要はありません。悪い:最初にsocatをインストールする必要があります。

+0

あなたは正しいです。それはおそらく彼が話していた議論だろう。しかし、LWP :: UserAgentはこの目的では役に立たない。なぜなら、彼が話しているスクリプトはHTTPやLWP以外のカスタムプロトコルを使用しているからだ。 – cjm

+0

はい。これは私が読んだ議論です。それを言わなければならなかった。ありがとう。今週末にこれを試してみるよ。 – Dilawar

関連する問題