infernil
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору [create_user.php] <? /*--------------------------------------------------------------------------*/ $remote_user_timeout = 10*60; $server_ip = "62.212.45.30"; /*--------------------------------------------------------------------------*/ function Clear_Dir() { global $timestamp, $remote_user_timeout; $dir_handle = opendir(_PATH_REMOTE_USERS); while (($file=readdir($dir_handle))!==false) { if (($file!="..") && ($file!=".")) { $full_file_name=_PATH_REMOTE_USERS.$file; $file_stat=stat($full_file_name); $file_timestamp=$file_stat[9]; if ($timestamp-$remote_user_timeout>=$file_timestamp) unlink($full_file_name); }; }; closedir($dir_handle); } define("_PATH",dirname(__FILE__)); define("_PATH_REMOTE_USERS",_PATH."/data/remote_users/"); define("_PATH_BLOCKS",_PATH."/data/blocks/"); $uid=$HTTP_GET_VARS['uid']; $timestamp=time(); $block_file_name=_PATH_BLOCKS."remote_users"; if (!file_exists(_PATH_BLOCKS."remote_users")) { touch($block_file_name); Clear_Dir(); unlink($block_file_name); }; if ($uid && ($REMOTE_ADDR==$server_ip)) { touch(_PATH_REMOTE_USERS.$uid); }; ?> [create_url.php] <? /*--------------------------------------------------------------------------*/ $global_timeout = 60*60*5; $stat_timeout = 60; $server_ip = "62.212.45.30"; $passwd = "secret_word"; $max_users = 30; /*--------------------------------------------------------------------------*/ function Empty_Dir($dir_name) { $dir_handle = opendir($dir_name); while (($file=readdir($dir_handle))!==false) { if (($file!="..") && ($file!=".")) { unlink($dir_name."/".$file); }; }; closedir($dir_handle); } function Logging($msg) { $log_handle=fopen("script.log",a); fwrite($log_handle,"[".date("H:i")."] ".$msg."\r\n"); fclose($log_handle); } function Net_Stat() { global $passwd; ob_start(); system("netstat -n"); $stats=ob_get_contents(); ob_end_clean(); $dir_handle = opendir(_PATH_SESSIONS); while (($file=readdir($dir_handle))!==false) { if (($file!="..") && ($file!=".")) { $full_file_name=_PATH_SESSIONS.$file; $hash=strtoupper(md5($file.$passwd)); $file_part=explode(".",$file); $ip_addr=$file_part[0].".".$file_part[1].".".$file_part[2].".".$file_part[3]; if (!strstr($stats,$ip_addr)) { unlink($full_file_name); Empty_Dir(_PATH_USERS.$hash); rmdir(_PATH_USERS.$hash); if (!file_exists(_PATH_USERS.$hash)) { Logging("[NETSTAT] delete ".$hash); } else { Logging("[NETSTAT] direcoty ".$hash." exist"); }; }; }; }; closedir($dir_handle); } function Update_Dir() { global $timestamp, $stat_timeout; $block_file=_PATH_BLOCKS."stat_block"; if (!file_exists($block_file)) { touch($block_file); Net_Stat(); }; $stats=stat($block_file); if ($timestamp-$stats[9]>=$stat_timeout) { touch($block_file); Net_Stat(); }; } function Clear_Dir() { global $timestamp, $global_timeout, $passwd; $dir_handle = opendir(_PATH_SESSIONS); while (($file=readdir($dir_handle))!==false) { if (($file!="..") && ($file!=".")) { $full_file_name=_PATH_SESSIONS.$file; $stat=explode(".",$file); $session_timestamp=$stat[6]; $hash=strtoupper(md5($file.$passwd)); if ($timestamp-$session_timestamp>$global_timeout) { unlink($full_file_name); Empty_Dir(_PATH_USERS.$hash); rmdir(_PATH_USERS.$hash); if (!file_exists(_PATH_USERS.$hash)) { Logging("[TIMEOUT] delete ".$hash); }; }; }; }; closedir($dir_handle); } function Get_Users_Count() { $dir_handle = opendir(_PATH_USERS); $count=0; while (($file=readdir($dir_handle))!==false) { if (($file!="..") && ($file!=".")) { $count++; }; }; closedir($dir_handle); return($count); } define("_PATH",dirname(__FILE__)); define("_PATH_REMOTE_USERS",_PATH."/data/remote_users/"); define("_PATH_SESSIONS",_PATH."/data/sessions/"); define("_PATH_BLOCKS",_PATH."/data/blocks/"); define("_PATH_USERS",_PATH."/users/"); $uid=$HTTP_GET_VARS['uid']; $file=$HTTP_GET_VARS['file']; $timestamp=time(); $block_file_name=_PATH_BLOCKS."global_timeout"; if (!file_exists($block_file_name)) { touch($block_file_name); Clear_Dir(); Update_Dir(); unlink($block_file_name); }; if (!$uid || !$file) { trigger_error ("Ошибка в переданных параметрах.", E_USER_ERROR); }; if (!file_exists(_PATH_REMOTE_USERS.$uid)) { trigger_error ("Авторизация не проведена из-за возникшего таймаута. Вернитесь на сайт и обновите страницу.", E_USER_ERROR); }; if (Get_Users_Count()>=$max_users) { header("HTTP/1.0 503 Service Unavailable"); trigger_error ("Извините, но достигнуто максимальное количество разрешенных пользователей. Сервер заполнен на 100%. Попытайтесь позже.", E_USER_ERROR); }; $session_id=str_replace(" ",".",$REMOTE_ADDR.".".microtime()); touch(_PATH_REMOTE_USERS.$uid); touch(_PATH_SESSIONS.$session_id); $hash=strtoupper(md5($session_id.$passwd)); mkdir(_PATH_USERS.$hash); Logging("create ".$hash." for ".$REMOTE_ADDR); if (!strstr($file,"/pub/")) { trigger_error ("Обращение к запрещенной зоне.", E_USER_ERROR); }; symlink("/var/ftp".$file,_PATH_USERS.$hash."/".basename($file)); header("Location: http://filez.bugz.ru/antileech/users/".$hash."/".basename($file)); //echo("<a href=http://filez.bugz.ru/antileech/users/".$hash."/".basename($file).">ссылка</a>"); ?> Разбирайся. |