Вломал сайтец, он находится в сети - доступ в инет через Vpn и со статистикой(за бабки). За инет платить неохото, сайт(вломанный мной) внутри сети и вто же время он снаружи. Нужен скрипт чтобы залить на взломаный хост, и оттуда юзать инет, без подключения к инету? Такое вообще возможно если да токак, и спомощью какого скрипта. Зараньее благодарен!
Есть готовый написанный PHProxy.class.php на основе которого можно и написать все что хочешь ) в аттаче он + готовое решение на его основе
Всем спасибо, нашел вот что, может кого заинтресует: (кое что поправил) Code: <?PHP // $charset_default="windows-1251"; // $charset_default="koi8-r"; $charset_query="windows-1251"; $url_default="http://yandex.ru"; $time_limit=600; $expires_default=3600; $cookie_expires=3600; $ras_array=array("zip","rar"); $no_replace_all_array=array("http://","\\","."); $no_replace_left_array=array("+","#","mailto:","javascript:","ftp://","https://"); if (!ini_get("safe_mode")){set_time_limit($time_limit);} if ($expires_default>0){ header("Expires: ".gmdate('D, d M Y H:i:s',time()+$expires_default)." GMT"); } if ($expires_default<0){ header("Expires: Thu, 01 Jan 1970 00:00:01 GMT"); header("Cache-Control: no-cache"); header("Pragma: no-cache"); } $session_get=$HTTP_GET_VARS['session_new']; if ($session_get){ $location_get=$session_get; $strpos=strpos($session_get,"?"); if ($strpos && substr($session_get,0,7)!="http://"){ $session_get=substr($session_get,0,$strpos+1); $location_get=decode($session_get); $session_add=getenv('QUERY_STRING'); $strpos=strpos($session_add,"?"); $location_get=$location_get.substr($session_add,$strpos+1); $pos1=strpos($location_get,"?"); $pos2=strpos($location_get,"&"); if (($pos1 && $pos2 && $pos2<$pos1) || (!$pos1 && $pos2)){$location_get=preg_replace("#&#si","?",$location_get,1);} } $location=$location_get; } $session_post=$HTTP_POST_VARS['session_new']; if ($session_post){ $location_post=decode($session_post); $location=$location_post; } $url_array=url($location,1); $location=$url_array[0]; $location_code=code($location); if (!$location){ $content="<html> <head> <title>PHP-serf (".getenv('SERVER_NAME').")</title> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\"> </head> <body> <br><br> <form action=\"\" method=\"POST\"> <div align=\"left\"> <input type=\"Text\" name=\"session_new\" value=\"\"> <input type=\"Submit\" value=\"...\"> </font> </form> </div> </body> </html>"; if ($charset_default){ header("Content-Type: text/html; charset=$charset_default"); $content=decode_charset($content,"windows-1251",$charset_default); } echo $content; exit; } if ($HTTP_POST_VARS['referer_new']){$referer_new=decode($HTTP_POST_VARS['referer_new']);} if ($HTTP_GET_VARS['referer_new']){$referer_new=$HTTP_GET_VARS['referer_new'];} if (!$referer_new && getenv('HTTP_REFERER')){ $tmp=@parse_url(getenv('HTTP_REFERER')); parse_str($tmp[query],$tmp); $referer_new=$tmp[session_new]; if ($referer_new){ $strpos=strpos($referer_new,"?"); if ($strpos && substr($referer_new,0,7)!="http://"){ $find=substr($referer_new,0,$strpos+1); $replace=decode($find); $referer_new=str_replace($find,$replace,$referer_new); } } } if ($referer_new){ $url_array=url($referer_new,0); $referer_new=$url_array[0]; } if ($PHP_AUTH_USER && $PHP_AUTH_PW){$auth_new=base64_encode("$PHP_AUTH_USER:$PHP_AUTH_PW");} $charset_new=$HTTP_POST_VARS['charset_new']; if (!$charset_new){$charset_new=$charset_query;} $connection=connection($location); $message=$connection[0]; $head=$connection[1]; $content=$connection[2]; $tmp=explode(".",$host_new); $host_cookie=$tmp[count($tmp)-2]."_".$tmp[count($tmp)-1]; if (stristr($head,"Cookie:")){ preg_match_all("#Set-Cookie: (.*?)=\"?(.*?)\"?(; expires=(.*?))?[;\r]#is",$head,$cookie_array); $perem_array=$cookie_array[1]; $value_array=$cookie_array[2]; $expires_array=$cookie_array[4]; for ($i=0; $i<count($perem_array); $i++){ if ($expires_array[$i] && strtotime($expires_array[$i],"\n")){$expires_array[$i]=strtotime($expires_array[$i],"\n");} else {$expires_array[$i]=time()+$cookie_expires;} setcookie ($host_cookie."[".$perem_array[$i]."]",$value_array[$i],$expires_array[$i]); $HTTP_COOKIE_VARS[$host_cookie][$perem_array[$i]]=$value_array[$i]; } } $content_ras=strtolower(substr($path_new,strrpos($path_new,".")+1)); if (!$content_ras || strlen($content_ras)>4){$content_ras="html";} if (stristr($head,"Content-Type:")){ preg_match("#Content-Type: ([^\"';\s]+);?( charset=([^\"';\s]+))?[\s\r\n]#is",$head,$type); $content_type=strtolower($type[1]); $content_charset=strtolower($type[3]); } if (!$content_type){$content_type="text/html";} for($i=0;$i<count($ras_array);$i++){ if ($content_ras==$ras_array[$i]){$content_type="application/octet-stream";} } if (!$content_charset){ preg_match("#<meta[\s]http-equiv=\"?'?Content-Type\"?'?.*?charset=(.*?)[\"'\s>]#is",$content,$content_charset); $content_charset=strtolower($content_charset[1]); } if (!$content_charset){$content_charset=$charset_query;} if (stristr($head,"WWW-Authenticate:")){ preg_match("#WWW-Authenticate: (.*?)[\r\n]#is",$head,$auth); header("WWW-Authenticate: $auth[1]"); header("HTTP/1.0 401 Unauthorized"); } $refresh=""; if (preg_match("#Location: (.*?)[\s\r\n]#is",$head,$tmp)){ $refresh=parse($tmp[1]); $refresh="http://".getenv('HTTP_HOST').getenv('SCRIPT_NAME')."?session_new=".code($refresh); header("Location: $refresh"); } preg_match_all("#<head>.*?<meta.*?http-equiv=.*?refresh.*?url=(.*?)[\'\" ].*?[>].*?</head>#is",$content,$refresh_array); replace($refresh_array[0],$refresh_array[0],$refresh_array[1],"?session_new=",""); $content_len=strlen($content); if (!$content_len){exit;} if ($content_type!="text/html" && $content_type!="text/plain" && $content_type!="application/x-javascript"){ if (strrchr($path_new, "/")){$filename=substr(strrchr($path_new, "/"), 1);} else {$filename=$path_new;} if (preg_match("#(text|image).*?#si",$content_type)){ header("Content-Type: $content_type"); } else { header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=$filename"); header("Accept-Ranges: bytes"); header("Content-length: $content_len"); } echo $content; exit; } if ($charset_default){ $content_new=decode_charset($content,$content_charset,$charset_default); if ($content_new==$content){ $head_charset=$content_charset; } else { $head_charset=$charset_default; $content=$content_new; } } else { $head_charset=$content_charset; } if ($head_charset){header("Content-Type: $content_type; charset=$head_charset");} $content_no_script=preg_replace("#<script[^>]*?[>].*?</script>#is","",$content); // содержимое скриптов preg_match_all("#<script[^>]*?[>].*?</script>#is",$content,$script_array); if ($script_array[0]){$content_script=implode("\n",array_unique($script_array[0]));} if ($content_ras=="js" || $content_type=="application/x-javascript"){$content_script=$content; $content_no_script="";} preg_match("#<base[\s]*?href=[\"']?(.*?)[\"'\s>]#si",$content,$base_array); $base_href=$base_array[1]; if ($base_href){ $url_array=url($base_href,0); $preffix_new=$url_array[7]; $content=preg_replace("#<base[\s\n]*?href=.*?[>]#si","",$content); } preg_match_all("!(<form[\s>].*?\>|<form>)!is",$content,$form_array); $form_array=array_values(array_unique($form_array[0])); for ($i=0;$i<count($form_array);$i++){ preg_match("! action[\s]*=[\s]*\"?'?(.*?)[\"\'\s>]!is",$form_array[$i],$tmp); $action_array[$i]=$tmp[1]; if (!$action_array[$i]){$action_array[$i]=$location;} if (stristr($form_array[$i],"post")){$method_new="POST";} else {$method_new="GET";} $form_array_new[$i]=preg_replace("' action=.*?([\s>])'si","$1",$form_array[$i]); $form_array_new[$i]=preg_replace("' method=.*?([\s>])'si","$1",$form_array_new[$i]); $form_array_new[$i]=preg_replace("'<form'si","<form method=post",$form_array_new[$i]); $session_code=code($action_array[$i]); $replace="$form_array_new[$i] <input type=\"hidden\" name=\"session_new\" value=\"$session_code\"> <input type=\"hidden\" name=\"referer_new\" value=\"$location_code\"> <input type=\"hidden\" name=\"method_new\" value=\"$method_new\">"; if ($charset_default){$replace.="\n<input type=\"hidden\" name=\"charset_new\" value=\"$content_charset\">";} $content=str_replace($form_array[$i],$replace,$content); } preg_match_all("#\.action[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$script_action_array); $script_action_replace=str_replace(".action",".session_new.value",$script_action_array[0]); replace($script_action_array[0],$script_action_replace,$script_action_array[1],"",""); preg_match_all("#(<a|link|area)[\s].*?href[\s]*=[\s]*\\\?\"?'?(.*?)\\\?[\"'\s>]#is",$content,$href_array); replace($href_array[0],$href_array[0],$href_array[2],"?session_new=",""); preg_match_all("#<(img|embed|frame|iframe|input|script)[\s].*?src[\s]*=[\s]*\\\?\"?'?(.*?)\\\?[\"'\s>]#is",$content,$src_array); replace($src_array[0],$src_array[0],$src_array[2],"?session_new=",""); preg_match_all("#\.src[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$script_src_array); replace($script_src_array[0],$script_src_array[0],$script_src_array[1],"?session_new=",""); preg_match_all("#<(body|table|td)[\s].*?background[\s]*=[\s]*\"?'?(.*?)[\"'\s>]#is",$content,$background_array); replace($background_array[0],$background_array[0],$background_array[2],"?session_new=",""); preg_match_all("#(location.href|document.location|document.url|parent.location)[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$location_array); replace($location_array[0],$location_array[0],$location_array[2],"?session_new=",""); preg_match_all("#(window.open|location.assign)\([\"'](.*?)[\"',\s>\)]#is",$content,$window_array); replace($window_array[0],$window_array[0],$window_array[2],"?session_new=",""); preg_match_all("#[\"'](http://.*?|http%3A%2F%2F.*?)[\"'\s\)>]#is",$content_script,$http_array); replace($http_array[0],$http_array[0],$http_array[1],"?session_new=",""); preg_match_all("#document.cookie[\s]*=[\s]*[\"'](.*?)[\"']#is",$content,$script_cookie_array); $script_cookie_array=$script_cookie_array[1]; for ($i=0; $i<count($script_cookie_array); $i++){ preg_match("#(.*?)=(.*?)[;\s]#is",$script_cookie_array[$i],$perem_cookie_array); $find=$perem_cookie_array[1]; if ($find){ $replace=$host_cookie."[".$find."]"; $replace=str_replace("$find=","$replace=",$script_cookie_array[$i]); $find=$script_cookie_array[$i]; $content=str_replace($find,$replace,$content); } } $host_find=$host_new; if (substr($host_find,0,4)=="www."){$host_find=substr($host_find,4);} $host_proxy=getenv('HTTP_HOST'); preg_match_all("#[=(][\s]*[\"'](www\.)?".$host_find."/?[\"']#is",$content,$script_host_array); $script_host_array=array_unique($script_host_array[0]); for ($i=0;$i<count($script_host_array);$i++){ $find=$script_host_array[$i]; $replace=str_replace($host_new,$host_proxy,$script_host_array[$i]); $content=str_replace($find,$replace,$content); } // echo "$message\n\n$head\n\n"; echo $content; function connection($location){ global $HTTP_POST_VARS,$HTTP_COOKIE_VARS,$HTTP_POST_FILES,$referer_new,$auth_new,$charset_default; $url_array=url($location,0); $scheme=$url_array[1]; $method=$url_array[2]; $host=$url_array[3]; $port=$url_array[4]; $path=$url_array[5]; $get=$url_array[6]; $referer=$referer_new; $auth=$auth_new; $charset=$charset_default; $post=mass($HTTP_POST_VARS,1,"\$perem=\$value&"); if ($method=="GET" && $post){$get="$get&$post"; $post="";} if ($get){$get="?$get";} $tmp=explode(".",$host); $host_cookie=$tmp[count($tmp)-2]."_".$tmp[count($tmp)-1]; $mass=$HTTP_COOKIE_VARS[$host_cookie]; $cookie=mass($mass,1,"\$perem=\$value; "); if (substr($cookie,-2)=="; "){$cookie=substr($cookie,0,-2);} $type=getenv('CONTENT_TYPE'); if ($type && stristr($type,"multipart/form-data")){ preg_match("#boundary=(.*)#si",$type,$boundary); $boundary=$boundary[1]; $post=mass($HTTP_POST_VARS,0,"--$boundary\r\nContent-Disposition: form-data; name=\"\$perem\"\r\n\r\n\$value\r\n"); $mass=$HTTP_POST_FILES; if ($mass){ reset($mass); for ($i=0; $i<count($mass); $i++){ $perem=key($mass); $filename=$mass[$perem][name]; $filetype=$mass[$perem][type]; if ($filename){ global ${"$perem"}; $filecontent=implode("",file(${"$perem"})); $post.="--$boundary\r\nContent-Disposition: form-data; name=\"$perem\"; filename=\"$filename\"\r\nContent-Type: $filetype\r\n\r\n$filecontent\r\n"; } } } $post.="--$boundary--"; } $message="$method $path$get HTTP/1.0\r\n"; $message.="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*\r\n"; if ($referer){$message.="Referer: $referer\r\n";} $message.="Accept-Language: ru\r\n"; if ($charset){$message.="Accept-Charset: $charset\r\n";} if ($auth){$message.="Authorization: Basic $auth\r\n";} if ($post && $boundary){$message.="Content-Type: multipart/form-data; boundary=$boundary\r\n";} if ($post && !$boundary){$message.="Content-Type: application/x-www-form-urlencoded\r\n";} $message.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n"; $message.="Host: $host\r\n"; if ($post){$post="\r\n$post"; $message.="Content-length: ".strlen($post)."\r\n";} $message.="Connection: close\r\n"; $message.="Cache-Control: no-cache\r\n"; $message.="Pragma: no-cache\r\n"; if ($cookie){$message.="Cookie: $cookie\r\n";} if ($post){$message.="$post\r\n";} $message.="\r\n"; //echo $message; // exit; $fp=fsockopen($host,$port,$errno,$errstr); if (!$fp){echo "Нет связи с сервером. Повторите попытку позднее. $errno ($errstr).";} fputs($fp,$message); while(!feof($fp)){$fgets=fgets($fp,2048); if ($fgets=="\r\n" || $fgets=="\n"){break;} $head.=$fgets;} while(!feof($fp)){$content.=fread($fp,2048);} fclose($fp); // echo $head; // echo $content; return array($message,$head,$content); } function url($location,$save){ if (!$location){return;} global $url_default,$scheme_new,$method_new,$host_new,$port_new,$path_new,$preffix_new; $url=@parse_url($url_default); $scheme_default=$url[scheme]; $host_default=$url[host]; $path_default=$url[path]; $method_default="GET"; $port_default=80; $url=preg_replace("#://?#si","://",$location,1); $url=@parse_url($url); $scheme=$url[scheme]; if (!$scheme){$scheme=$scheme_new;} if (!$scheme){$scheme=$scheme_default;} $method=$method_new; if (!$method){$method=$method_new;} if (!$method){$method=$method_default;} $host=$url[host]; if (!$host){$host=$host_new;} if (!$host){$host=$host_default;} $port=$url[port]; if (!$port){$port=$port_new;} if (!$port){$port=$port_default;} $path=$url[path]; $path=str_replace("\\","/",$path); $path="/$path"; $path=preg_replace("'/{2,100}'si","/",$path); for ($i=0;$i<10;$i++){$path=preg_replace("#/[^\./][^/]+/\.\.?/#si","/",$path);} for ($i=0;$i<10;$i++){$path=preg_replace("#/\.\.?/#si","/",$path);} $get=$url[query]; $get=get($get); $preffix=$scheme."://".$host.substr($path,0,strrpos($path,"/"))."/"; $location=$scheme."://".$host.$path; if ($get){$location.="?$get";} if ($save){ $scheme_new=$scheme; $method_new=$method; $host_new=$host; $port_new=$port; $path_new=$path; $preffix_new=$preffix; $location_new=$location; } return array($location,$scheme,$method,$host,$port,$path,$get,$preffix); } function parse($url){ global $scheme_new,$host_new,$preffix_new; if (!$url || $url=="http://" || $url=="\\"){return $preffix_new;} if (substr($url,0,1)=="/"){ $url=$scheme_new."://".$host_new.$url; } else { $tmp=@parse_url($url); if ($tmp[scheme]!="http" && $tmp[scheme]!="https" && $tmp[scheme]!="ftp"){$url=$preffix_new.$url;} } return $url; } function code($str){ if (!$str){return;} $str=parse($str); $str=base64_encode($str); $str=str_replace("=","$",$str); $code="$str?"; return $code; } function decode($code){ if (!$code){return;} if (substr($code,0,7)=="http://"){return $code;} if (substr($code,-1)=="?"){$code=substr($code,0,-1);} $code=str_replace("$","=",$code); $str=base64_decode($code); return $str; } function replace($mass1,$mass2,$mass3,$left,$right){ global $content,$no_replace_all_array,$no_replace_left_array; for ($i=0;$i<count($mass1);$i++){ $mass3[$i]=trim($mass3[$i]); if ($mass3[$i]){ $sovp=0; for ($j=0;$j<count($no_replace_all_array);$j++){if ($no_replace_all_array[$j]==$mass3[$i]){$sovp=1;}} for ($j=0;$j<count($no_replace_left_array);$j++){if ($no_replace_left_array[$j]==substr($mass3[$i],0,strlen($no_replace_left_array[$j]))){$sovp=1;}} if (!$sovp){ $replace=$mass3[$i]; $replace=$left.code($replace).$right; $replace=str_replace($mass3[$i],$replace,$mass2[$i]); $content=str_replace($mass1[$i],$replace,$content); } } } } function get($get){ if (!$get){return;} global $charset_default,$charset_new; $get=str_replace("&","&",$get); $get=str_replace(""","\"",$get); $get=str_replace("'","'",$get); $get=str_replace("<","<",$get); $get=str_replace(">",">",$get); preg_match_all("#=([^&;]+)#is",$get,$mass); $mass=$mass[1]; for ($i=0; $i<count($mass); $i++){ $find=$replace=$mass[$i]; $replace=urldecode($replace); if ($charset_default){$replace=decode_charset($replace,$charset_default,$charset_new);} $replace=urlencode(stripslashes($replace)); $get=str_replace("=$find","=$replace",$get); } $get=str_replace("%3A",":",$get); $get=str_replace("%40","@",$get); return $get; } function keys($mass,$c,$d){ global $a,$b; $keys=array_keys($mass); for($i=0;$i<count($keys);$i++){ $perem=$d[$c]=$b[$a][$c]=$keys[$i]; $value=$mass[$perem]; for($j=1;$j<$c;$j++){$b[$a][$j]=$d[$j];} if (is_array($value)){$c++; keys($value,$c,$d); $c--;} else {$a++;} } } function mass($mass,$code,$repl){ if (!$mass){return;} global $charset_default,$charset_new; global $a,$b; $a=0; $b=""; keys($mass,1,null); for($i=0;$i<count($b);$i++){ $perem=""; $value=$mass; for($j=1;$j<=count($b[$i]);$j++){ if ($j==1){$perem.=$b[$i][$j];} else {$perem.="[".$b[$i][$j]."]";} $value=$value[$b[$i][$j]]; } if ($perem!="session_new" && $perem!="referer_new" && $perem!="method_new" && $perem!="charset_new"){ $value=urldecode($value); if ($charset_default){$value=decode_charset($value,$charset_default,$charset_new);} if ($code){$value=urlencode(stripslashes($value));} $new=str_replace("\$perem",$perem,$repl); $new=str_replace("\$value",$value,$new); $zapr.=$new; } } $zapr=str_replace("%3A",":",$zapr); $zapr=str_replace("%40","@",$zapr); return $zapr; } function decode_charset($content,$code,$decode){ if (!$content || !$code || !$decode || $code==$decode){return $content;} $charset=array("koi8-r"=>"k","windows-1251"=>"w","iso8859-5"=>"i","x-cp866"=>"a","x-mac-cyrillic"=>"m","utf-8"=>"u"); $from=$charset[$code]; $to=$charset[$decode]; if (!$from || !$to){return $content;} if ($from=="u"){ $content=convert_utf_string($content,"w"); $content=convert_cyr_string ($content,"w",$to); } elseif ($to=="u"){ $content=convert_cyr_string ($content,$from,"w"); $content=convert_utf_string($content,"u"); } else { $content=convert_cyr_string ($content,$from,$to); } return $content; } function convert_utf_string($str,$type){ // w - encodes from UTF to win ; u - encodes from win to UTF static $conv=''; if(!is_array($conv)){ $conv=array(); for ($x=128;$x<=143; $x++){ $conv['utf'][]=chr(209).chr($x); $conv['win'][]=chr($x+112); } for ($x=144; $x<=191; $x++){ $conv['utf'][]=chr(208).chr($x); $conv['win'][]=chr($x+48); } $conv['utf'][]=chr(208).chr(129); $conv['win'][]=chr(168); $conv['utf'][]=chr(209).chr(145); $conv['win'][]=chr(184); } if ($type=='w'){ return str_replace($conv['utf'],$conv['win'],$str ); } elseif ($type=='u'){ return str_replace ($conv['win'],$conv['utf'],$str); } else { return $str; } } ?> По мне это лучший вариант, это и искал)!
lol2006! Дружище! Ты зачем код правил, заняться нечем? Возникают ошибки при работе с сессиями. Использует GET/POST Тоже порадовало!
Ну сам посуди, как скрипт к ремоут хосту сможет подключиться, если ему собственно нельзя юзать сокеты Имхо не получится без сокетов, если только есть шелл и доступен lynx\GET\curl\etc...
я бы посоветовал заюзать HTTP tunnel - включает в себя клиент -запускается локально на компе и открывает порт, и серверная часть на perl или php(>5 v), вобще существует множество разработок, в том числе например реализация tcp over ICMP и много чего вобще еще.
PS в винде вроде както можно с помощью SocksCap настроить чтоб весь траф шел через сокс, если не ошибаюсь.