過去 15 日間、私はこの問題を解決するために頭を悩ませています。リモート mysql サーバーに接続する PHP アプリケーションがありますが、アプリケーションはリモート mysql サーバーに直接アクセスできず、socks プロキシ経由で接続する必要があります。この問題を解決するために誰か助けてください。
前もって感謝します。
他の誰かがこれをやったことがあるかどうかを探していましたが、そうではないと思います. PHP用のSOCKS4aへのインターフェースを作りました。ここにあります。
function fsocks4asockopen($proxyHostname, $proxyPort, $targetHostname, $targetPort)
{
$sock = fsockopen($proxyHostname, $proxyPort);
if($sock === false)
return false;
fwrite($sock, pack("CCnCCCCC", 0x04, 0x01, $targetPort, 0x00, 0x00, 0x00, 0x01, 0x00).$targetHostname.pack("C", 0x00));
$response = fread($sock, 16);
$values = unpack("xnull/Cret/nport/Nip", $response);
if($values["ret"] == 0x5a) return $sock;
else
{
fclose(sock);
return false;
}
}
正確には最終製品ではありませんが、PHP からの socks4a プロキシとの接続を開き、fsockopen で行うのと同じ種類のソケットを取得することができます。
SOCKS プロキシ経由でポート転送を設定する必要があると思います。これにより、SOCKS プロキシを介してリモート ホストとポート (databasehost:3306) に接続を転送するローカル ポート (たとえば 3306) を開きます。これをバックグラウンドで実行し、PHP を localhost:3306 に接続させます (その後、databasehost:3306 に転送/トンネリングされます)。