И так начну с того, что есть такой провайдер в Саратове - ВолгаТелеком.
Предлагает много услуг, в частности широкополосный интернет (J - джэй) по ADSL.
Есть такое понятие: ФОС - файло-обменная сеть. Т.е. - можно качать друг у друга посредством p2p, открывать свои игровые сервера, веб, ftp, email (дополнить своим ;-)...
Да! Вот только `нормального` интернета нету. Открывается только несколько сайтов. IP адрес при подключении выдаётся динамический (можно купить статический, но здесь не про это ;-).
Решил я воспользоваться сервисом dynamic dns (в интернете несколько таких сервисов), но вот только из под ФОС`а до него нельзя добраться.
Админов, чтобы открыли, как я понял, полазив по форуму,
врядли возможно уговорить открыть доступ хоть к одному сервису ddns...
И вот решил я написать что-то типа прокси. Т.е. клиентом (программой) отсылается запрос на web сервер, который доступен из ФОС`а и подключен к `нормальному`
интернету запрос на изменение ip адреса для сервиса dyndns.com. Далее скрипт, передаёт информацию на сервер members.dyndns.org, который и делает своё `грязное` дело.
На клиентской стороне работает программа, которая следит за изменением ip адреса и `стучит` серверу в случае его изменения.
Сервис dyndns предлагает несколько клиентов: ссылка1,
ссылка2.
`Официального` клиента DynDNS Updater мне не удалось настроить, чтобы он работал через `другой`
сервер (я не захотел долго возиться, после того, как в exe`шнике нашёл url на members.dyndns.org).
Зато другой клиент - DirectUpdate
прекрасно работает (пришлось немного изменить конфиг (надо положить его в каталог `dns` установленной программы)).
Если кому надо, то вот исходник:
#cat dyndns_proxy.php
<?
if( strlen($_SERVER["QUERY_STRING"]) == 0)
die("nothing todo...");
//пїЅпїЅпїЅпїЅпїЅ
$cur_dir = getcwd();
chdir($_SERVER["DOCUMENT_ROOT"] . "/_inc/countler/");
require_once("include.inc.php");
counter(); //пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
chdir($cur_dir);
//end
$site = "members.dyndns.org";
$port = "8245";
$page = "/nic/update";
$log_fname = "log/" . date("Y-m-d_H_i_s") . ".html";
$user = $_SERVER["PHP_AUTH_USER"];
$pass = $_SERVER["PHP_AUTH_PW"];
$base64_up = base64_encode($user . ":" . $pass);
$sock = fsockopen($site, $port, $errno, $errstr);
if(!$sock)
{
echo "Error: ". $errstr . "(" . $errno . ")<br>\n";
} else
{
fputs($sock, "GET " . $page . "?" . $_SERVER["QUERY_STRING"] . " HTTP/1.0\r\n");
fputs($sock, "User-Agent: " . $_SERVER["HTTP_USER_AGENT"] . "\r\n");
fputs($sock, "Authorization: Basic " . $base64_up ."\n\n");
ob_start();
echo urldecode($_SERVER["QUERY_STRING"]) . "<br><br>\n\n";
echo "user=" . $user . ", pass=" . $pass . "<br>\n\n";
echo "<xmp>\n\n";
$answer = 0;
while ( !feof($sock) )
{
$html = trim( fgets($sock) );
if( $answer == 1)
$out .= $html;
if( strlen($html) == 0)
$answer = 1;
echo $html . "\n";
}
$buf = ob_get_clean();
//пїЅпїЅпїЅ пїЅ пїЅпїЅпїЅ
if( strlen($buf) > 0 )
{
$f = fopen($log_fname, "w+");
fwrite($f, $buf);
fclose($f);
}
//end
ob_end_clean();
echo $out;
fclose($sock);
}
?>
Обсудить на форуме
|