[英]Socks 4 bind in php example
<?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代理。 当第一个连接正常连接时,服务器答案已被授予,但此时的通信已完成。 这个例子如何继续沟通?
您很幸运收到了“已授予”回复-我在OpenSSH中没有收到来自SOCKS服务器的任何回复,它只是关闭了连接...
据我了解的SOCKS4描述,类型2(BIND)请求的答案包含一个端口号和一个IP地址。 当连接到达他们时,您的程序将能够读取下一个状态数据包,该数据包告诉您有关连接的信息。 等待连接的时间有限(似乎为2分钟)。 这主要用于FTP客户端-FTP服务器需要与客户端的反向连接,而BIND允许通过连接。
如果要从侧面发起连接,请使用类型1(CONNECT)请求。 另外,请确保请求中的端口和IP地址正确-在您的代码中看起来是80和192.240.30.126。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.