1

プロキシの背後から外部 SMTP サーバーに接続しようとしています。fsockopen にプロキシの背後から Web サイトを取得させる方法はわかりましたが、SMTP サーバーに接続する方法はわかりませんでした。SMTP サーバーには、TLS 接続とユーザー名とパスワードによる認証が必要です。

プロキシの背後から Web ページを取得するために私が持っているのは、次のコードです。

<?
$proxy_fp = fsockopen('111.111.111.111', '80');

if (!$proxy_fp) {
    return false;
}

fputs($proxy_fp, "GET http://wwww.google.com HTTP/1.0\r\nHost: 111.111.111.111\r\n\r\n");
while (!feof($proxy_fp)) {
    $proxy_cont .= fread($proxy_fp, 4096);
}
fclose($proxy_fp);
$proxy_cont = substr($proxy_cont, strpos($proxy_cont, "\r\n\r\n") + 4);
return $proxy_cont;
?>

プロキシを SMTP サーバーに接続するにはどうすればよいでしょうか。


- - 編集 - -

<?
$s = "\r\n";

$proxy = '24.47.131.253';
$port = 8123;

$fp = fsockopen($proxy, $port);
socket_set_timeout($fp, 10, 0);

fputs($fp, "CONNECT smtp.domain.com:25 HTTP/1.0".$s.$s);

while(!feof($fp)){
    $line = fgets($fp, 4000);
    echo $line."\n";
}
fclose($fp);
?>

私は今、答えに基づいてこれを持っています。問題は、SMTP サーバーからの応答が得られないことです。空の行が出力されるだけです。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

2

SMTP と HTTP は相互に互換性のあるプロトコルではありません。実際、それらは互いに完全に異なります。

あなたが試すことができるのは、HTTP CONNECTメソッドの抜け穴を使用することです: GET または POST の代わりに、送信CONNECT yourserver:yourport HTTP/1.0- 要求されたホストとポートへの TCP 接続を取得する必要があります (より完全なリファレンスについては、これを参照してください)。一部のプロキシは、許可された宛先ポートを 443 (HTTPS) に制限するか、CONNECT トラフィックを検査して、ユーザーが任意のサービス (SMTP など) へのトンネリングを防止することに注意してください。

ほとんどの組織では、このようなアクションは「アクセス制御やセキュリティ ポリシーを回避する」と解釈される可能性があるため、注意して進めてください。

于 2011-02-01T12:58:49.567 に答える