2010-08-31 91 views
1

在过去的十五天,我打破了我的头来解决这个问题。我有一个连接到远程mysql服务器的PHP应用程序,但应用程序不能直接访问远程mysql服务器,它必须通过socks代理连接。请任何人都可以帮我解决这个问题。php - 袜子代理

在此先感谢。

+0

哪个mysql软件包你使用'pdo_mysql','mysqli','mysql'吗? – prodigitalson 2010-08-31 16:25:46

+0

我正在使用PDO,我也可以使用其他人。 – Kaartz 2010-08-31 16:35:59

回答

0

我想你需要通过SOCKS代理设置端口转发。用这个,你打开一个本地端口(例如在3306上),它通过SOCKS代理转发到远程主机和端口(数据库主机:3306)的连接。你在后台运行,这一点,使PHP连接到本地主机:3306(然后将被转发/隧道传输到databasehost:3306)

+0

如何做到这一点?请你能帮助我吗? – Kaartz 2010-08-31 16:51:19

+0

如果您可以设置与该机器的SSH连接并让SSH转发该端口,将会更容易(也更安全)。这对你来说是一种选择吗? – schuilr 2010-08-31 18:31:15

+0

我有权访问mysql服务器,但我无法SSH进入该服务器。 – Kaartz 2010-08-31 19:19:50

2

我一直在寻找,看看别人做了这个,但我想不会。我为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