Redwind
Новичок
socks соединение
У меня появилась задача, подключится к socks5 и через него скачать страничку.
Я нашел здесь(на форуме) скрипт:
Но он отображает пустое окно.
Может кто-то знает как это исправить?
Потом я нашел готовые библиотеки для подключения к socks5:
и тестер к ней:
Запускаю я этот тондем, а результат таков:
Fatal error: Maximum execution time of 30 seconds exceeded in z:\home\localhost\www\socks5.lib.php on line 21
Пробовал переписывать библиотеку, менял десятки прокси, устанавливал set_time_limit(0), но скрипт работать так и не стал(или просто перестал выводить ошибку выводил пустую страницу). Может кто-нибудь знает как его довести до рабочего состояния или привести аналог подключения через socks.
У меня появилась задача, подключится к socks5 и через него скачать страничку.
Я нашел здесь(на форуме) скрипт:
PHP:
<?php
$server = "218.152.112.34";
$port = 1080;
$fs = fsockopen($server, $port, $errno, $errstr, 20);
if (!$fs) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fs, "\x05\x01\x00\x05");
$buf = "";
while (!feof($fs)) {
echo $buf.= fgets ($fs,128);
}
fclose ($fs);
}
?>
Может кто-то знает как это исправить?
Потом я нашел готовые библиотеки для подключения к socks5:
PHP:
-----socks5.lib.php--------
<?
class socks5 {
var $socket;
var $connected;
var $debug;
function socks5($ip, $port) {
if ($this->socket = pfsockopen($ip, (int)$port, $errno, $errstr)) {
$buf["send"] = pack("C3", 0x05, 0x01, 0x00);
fwrite($this->socket, $buf["send"]);
$buf["recv"] = "";
while ($buffer = fread($this->socket, 1024)) {
$buf["recv"] .= $buffer;
}
$responce = unpack("Cversion/Cmethod", $buf["recv"]);
if ($responce["version"] == 0x05 and responce["method"] == 0x00) {
return true;
}
fclose($this->socket);
}
return false;
}
function connect($host, $port) {
if ($this->socket) {
if (ip2long($host) == -1) {
$buf["send"] = pack("C5", 0x05, 0x01, 0x00, 0x03, strlen($host)).$host.pack("n", $port);
}
else
{
$buf["send"] = pack("C4Nn", 0x05, 0x01, 0x00, 0x01, ip2long(gethostbyname($host)), $port);
}
fwrite($this->socket, $buf["send"]);
$buf["recv"] = "";
while ($buffer = fread($this->socket, 1024)) {
$buf["recv"] .= $buffer;
}
$responce = unpack("Cversion/Cresult/Creg/Ctype/Lip/Sport", $buf["recv"]);
if ($responce["version"] == 0x05 and $responce["result"] == 0x00) {
$this->connected = true;
return true;
}
}
$this->connected = false;
return false;
}
function send($buffer, $length = 0) {
if ($length = 0) {
$length = strlen($buffer);
}
if ($this->socket and $this->connected) {
fwrite($this->socket, $buffer, $length);
while ($recieved = fread($this->socket, 1024)) {
$output .= $recieved;
}
return $output;
}
return false;
}
}
?>
PHP:
<?
include("socks5.lib.php");
$server_name = "www.site.com";
$server_port = 80;
$socks = new socks5("85.31.187.84", 9050);
if ($socks->connect($server_name, $server_port)) {
$headers[] = "GET / HTTP/1.1";
$headers[] = "Host: $server_name:$server_port";
$packet = join("\r\n", $headers)."\r\n\r\n";
$responce = $socks->send($packet);
echo $responce;
}
exit;
?>
Fatal error: Maximum execution time of 30 seconds exceeded in z:\home\localhost\www\socks5.lib.php on line 21
Пробовал переписывать библиотеку, менял десятки прокси, устанавливал set_time_limit(0), но скрипт работать так и не стал(или просто перестал выводить ошибку выводил пустую страницу). Может кто-нибудь знает как его довести до рабочего состояния или привести аналог подключения через socks.