Д о б р о     п о ж а л о в а т ь !
Я в лесу
Navigator
В корень
О себе
Портфолио
Резюме
Проекты
   ulog-acctd2sql
   pingler
   arp_dog
   SquidLER
   => DynDNS proxy
   Simple PC
speaker beeper

Разное
   IRC-приёмник
Фотки
Ссылки
О сервере

Rambler's Top100

CountLer. Мой счётчик посещений


 
 
DynDNS proxy project

И так начну с того, что есть такой провайдер в Саратове - ВолгаТелеком.
Предлагает много услуг, в частности широкополосный интернет (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"]); 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(); // phpinfo(); 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); } ?>
  

(c) Tsarev Alexey, 2005-2010. Написать мне.
Последнее обновление: 2009-04-09 20:40:53
Сгенерировано за: 0.038 сек. Сделано запросов: 23