<?php
error_reporting(E_ALL);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
$result = socket_connect($socket, "92.51.77.126", 1080); // socks ip
if ($result === false)
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
$in = "\x04\x02";
$in .= "\x00\x50"; // http proxy port
$in .= "\xc0\xf0\x2e\x7e"; // http proxy ip address
$in .= "\x00";
socket_write($socket, $in, strlen($in));
sleep(1);
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
socket_write($socket, $in, strlen($in));
$out = '';
while ($out = socket_read($socket, 2048)) {
echo $out;
}
socket_close($socket);
?>
我想绑定一个socks 4代理服务器来连接另一个代理。这个例子是secound代理是一个http代理。当连接第一个正常连接时,服务器应答被授予,但此时的通信已完成。这个例子如何继续沟通?
答案 0 :(得分:0)
你很幸运得到了一个'Granted'回复 - 我在OpenSSH中没有得到SOCKS服务器的任何回复,只是关闭了连接......
据我了解SOCKS4描述,类型2(BIND)请求的答案包含端口号和IP地址;当一个连接到达它们时,你的程序将能够读取下一个状态包,它告诉你连接。等待连接的时间有限(似乎是2分钟)。这主要用于FTP客户端 - FTP服务器需要与客户端的反向连接,BIND允许连接传递。
如果要从侧面发起连接,请使用类型1(CONNECT)请求。另外,请确保请求中的端口和IP地址是正确的 - 在您的代码中它们似乎是80和192.240.30.126。