webProxy feito em PHP
Publicado por Marcus Fazzi 26/03/2004
[ Hits: 15.609 ]
Este pequeno script PHP inplementa um webProxy, com suporte apenas ao protocolo HTTP na porta 80, mas mostra muitas técnicas de programação em PHP.
O script é totalmente orientado a objetos, possuindo o arquivo principal index.php e a classe webproxy.php
A licença deste script é BSD!
):-)
---------------->index.php <?php require 'webproxy.php'; //tempo ilimitado de script.... @set_time_limit(200); $wproxy = new WebProxy; if ($_GET['xurl']!='') { $wproxy->browser = $HTTP_SERVER_VARS["HTTP_USER_AGENT"]; $wproxy->web_self = $HTTP_SERVER_VARS["PHP_SELF"]; $wproxy->web_proxy = $HTTP_SERVER_VARS["HTTP_HOST"] . $wproxy->web_self; $wproxy->params = $_GET; $wproxy->url = $_GET['xurl']; $wproxy->getport(); $wproxy->getserver(); $wproxy->showresult(); } else { echo $wproxy->showbanner(); ?> <br></b> <link rel="stylesheet" href="./webproxy.css"> <form action='index.php' method="get"> <pre><img src="fzz.gif">URL:<input type="text" name="xurl" size="60"> <input type="submit" value="Go!"></pre> </form> <?php } ?> ------------------------> webproxy.php <?php define('WEB_PROXY','0.9.9.4b'); //to-do: verificar se tirando o :PORTA da url ela abre no webproxy.... //to-do: multiple form support... class WebProxy { var $url; //url to get... var $port; //port to connect... var $server; var $web_proxy; var $browser; var $protocol; var $page; var $svr_path; var $params; //Objetos que não levam o cabeçalho... var $objects = array('.jpg','.jpeg','.gif','.png','.css','.swf','.js','.zip','.gz','.tar','.rar','.exe','.pdf','.xls','.doc','.ppt','.mpg','.mpeg','.mp3','.mid','.midi','.wav','.java','.jar','.class','.xml','.css'); //Objetos binarios. var $bin_objects = array('.zip','.gz','.tar','.rar','.exe','.pdf','.xls','.doc','.ppt','.mpg','.mpeg','.mp3'); function showbanner() { $st0 = $this->url!= ''? " , opening: '$this->url' on port: '$this->port'</font>":''; return "<table border='0' bgcolor='AFAFD8' align='center' width='100%'><tr bgcolor='004080'><td><b><font size=2 color='AFAFD8'>WebProxy v" . WEB_PROXY . " by Fazzi.net</b>$st0<br> <a style='COLOR:AFAFD8;' href='./'>:: Go Home :: <img border='0' src='home.gif'></a></td></tr></table>\n"; } function getport() { $pp = explode('://',$this->url); $this->protocol = $pp[0]; $this->page = $pp[1]; switch ($this->protocol) { case 'http': $p = 80; break; case 'https': $p = 443; break; default: $p = 21; die('<b>WebProxy ERROR</b>: this version don\'t supports this protocol.'); break; } //get alternate ports... $pp = explode('/',$pp[1]); $port = explode(':',$pp[0]); $this->port = $port[1]!=''?$port[1]:$p; } function getserver() { $pp = explode('://',$this->url); $pp = explode('/',$pp[1]); $this->server = $pp[0]; $this->svr_path = $pp; $this->ext = strtolower(strrchr($this->url,'.')); } function showresult() { $data = ""; $fp = fsockopen($this->server,$this->port); if ($fp) { //patch 1.00 $n_vars = count($this->params); //from a form? if ($n_vars > 1) { $keys = array_keys($this->params); //$cg = '?'; for ($i=0; $i<$n_vars; $i++) { $eta = $i==0?'':$keys[$n_vars-$i-1] . '='; $new_url .= $cg . $eta . $this->params[$keys[$n_vars-$i-1]]; $cg = $i<1?'?':'&'; } $this->url = $new_url; } //fim patch 1.00 fputs($fp, "GET $this->url" . "\r\n\r\n"); $this->bin_head(); while (!feof($fp)) { if (!(in_array($this->ext,$this->objects))) { $data .= fread($fp, 1024); } else { echo fread($fp, 1024); } } fclose($fp); } else { echo "<b>WebProxy ERROR</b>: Can not connect to server.<br>"; } if (!(in_array($this->ext,$this->objects))) { echo $this->showbanner(); $data = $this->data_replace_links($data); echo $this->web_replace_title($data); } unset($data); } function web_replace_title($data) { if ($pos = strpos($data,'<title>') + strpos($data,'<TITLE>')) { return substr_replace($data,'WebProxy v' . WEB_PROXY . ' :: ' , $pos + 7, 0); } else { return substr_replace($data,'<title>WebProxy v' . WEB_PROXY . ' :: No Title</title>' , 0, 0); } } function data_replace_links($data) { $data = str_replace('./','',$data); $data = str_replace('http://','http://' . $this->web_proxy . '?xurl=http://',$data); $data = str_replace('="./','="' . 'http://' . $this->web_proxy . '?xurl=' . $this->url,$data); $data = str_replace("='./","='" . 'http://' . $this->web_proxy . '?xurl=' . $this->url,$data); $data = $this->tag_replace($data,'src'); $data = $this->tag_replace($data,'href'); $data = $this->form_replace($data); //$data = $this->tag_replace($data,'action'); return $data; } //patch 1.00 function form_replace($data) { $tag = 'action'; $sup_tag = substr_replace($tag,'Fzz',0,1); $len = strlen($data); $len_tag = strlen($tag); $pos_atual = 0; while ($pos_atual!=$len) { if ($pos = strpos($data,' ' . $tag)) { $st = substr($data,$pos,$len_tag + 10); //>>>>>>>>>>>>>> $pos_2 = strpos($st,"'") + strpos($st,'"'); $z = $pos_2 ? 1 : 0; $pos_2 = $pos_2==0? strpos($st,'='):$pos_2; $form_tmp = substr($data,$pos + $pos_2 + 1 ,1024); if ($z) { $pos_3 = strpos($form_tmp,'"') + strpos($form_tmp,"'"); } $pos_3 = $pos_3==0?strpos($form_tmp,' ')+1:$pos_3; $pos_3 = $pos_3==0?strpos($form_tmp,'>')+1:$pos_3; unset($form_tmp); $form_action = substr($data, $pos + $pos_2 + 1,$pos_3); if ($pos_4 = strpos($form_action,'?')) { $form_action = substr($form_action,$pos_4 + 6, strlen($form_action)- $pos_4 + 6); } $stpp = ''; $st3 = ''; $k = count($this->svr_path); $kk = strlen($form_action); if (substr($form_action,0,7)!='http://') { if (substr($form_action,0,1)=='/') { $stpp = $this->server; $stpp = str_replace('//','/',$stpp); $form_action = 'http://' . $stpp . $form_action; } else { for ($i=0;$i<$k-1;$i++) { $stpp .= $this->svr_path[$i] . '/'; } $stpp = str_replace('//','/',$stpp); $form_action = 'http://' . $stpp . $form_action; } } $form_action = "<input type='hidden' name='xurl' value='$form_action'>"; //$data = substr_replace($data,' ' . $form_action, $pos_5 + 1 ,0); if ($pos_5 = strpos($data,'</form>')) { $data = substr_replace($data, ' ' . $form_action . '</fzzorm>', $pos_5,7); } //>>>>>>>>>>>>>>> $st2 = str_replace(' ','',$st); if (substr($st2,$len_tag,1)=='=') { $c = substr($st2,$len_tag+1,1); $passo = 1; if ($c!="'" and $c!='"') { $c = ''; } $br = substr($st2,$len_tag+2,1); if (substr($st2,0,$len_tag + 9)!=$tag . '=' . $c . 'http://') { //pega a posição da " if ($c!='') { $x = strpos($st,$c); } else { $x = strpos($st,'='); } $stpp = ''; $st3 = ''; if ($br!='/') { for ($i=0;$i<$k-1;$i++) { $stpp .= $this->svr_path[$i] . '/'; } $stpp = str_replace('//','/',$stpp); $st3 = $this->web_proxy; } elseif ($br=='/') { $stpp = $this->server; $stpp = str_replace('//','/',$stpp); $st3 = $this->web_proxy; } $l = strlen($st3); $st3 = 'http://' . str_replace('//','/',$st3); $data = substr_replace($data,$st3,$pos+$x+$passo,$kk); } } $data = substr_replace($data,' ' . $sup_tag,$pos,$len_tag+1); } else { $pos_atual = $len; } } $data = str_replace('="post"','="get"',$data); $data = str_replace("='post'","='get'",$data); $data = str_replace("</fzzorm>","</form>",$data); return str_replace(' ' . $sup_tag,' ' . $tag,$data); } function tag_replace($data,$tag) { $sup_tag = substr_replace($tag,'Fzz',0,1); $len = strlen($data); $len_tag = strlen($tag); $pos_atual = 0; while ($pos_atual!=$len) { if ($pos = strpos($data,' ' . $tag)) { $st = substr($data,$pos,$len_tag + 10); $st2 = str_replace(' ','',$st); if (substr($st2,$len_tag,1)=='=') { $c = substr($st2,$len_tag+1,1); $passo = 1; if ($c!="'" and $c!='"') { $c = ''; } $br = substr($st2,$len_tag+2,1); if (substr($st2,0,$len_tag + 9)!=$tag . '=' . $c . 'http://') { //pega a posição da " if ($c!='') { $x = strpos($st,$c); } else { $x = strpos($st,'='); } $stpp = ''; $k = count($this->svr_path); $st3 = ''; if ($br!='/') { for ($i=0;$i<$k-1;$i++) { $stpp .= $this->svr_path[$i] . '/'; } $stpp = str_replace('//','/',$stpp); $st3 = 'http://' . $this->web_proxy . '?xurl=http://' . $stpp; } elseif ($br=='/') { $stpp = $this->server; $stpp = str_replace('//','/',$stpp); //$stpp = substr($stpp,strlen($stpp)-1,1)=='/'?substr($stpp,0,strlen($stpp)-1):$stpp; $st3 = 'http://' . $this->web_proxy . '?xurl=http://' . $stpp; } $l = strlen($st3); $data = substr_replace($data,$st3,$pos+$x+$passo,0); } } $data = substr_replace($data,' ' . $sup_tag,$pos,$len_tag+1); } else { $pos_atual = $len; } } return str_replace(' ' . $sup_tag,' ' . $tag,$data); } function bin_head() { if (in_array($this->ext,$this->bin_objects)) { $k = count($this->svr_path); $arquivo = $this->svr_path[$k-1]; //$size = strlen($data)*8; switch ($this->ext) { case '.pdf': header("Content-type: application/pdf\n"); break; case '.doc': header("Content-type: application/msword\n"); break; case '.xls': header("Content-type: application/vnd.ms-excel\n"); break; case '.ppt': header("Content-type: application/vnd.ms-powerpoint\n"); break; case 'mpg': header("Content-type: audio/mpeg\n"); break; case 'mpeg': header("Content-type: audio/mpeg\n"); break; case 'mp3': header("Content-type: audio/mpeg\n"); break; default: header("Content-type: application/octet-stream\n"); } if (strstr($this->browser, "MSIE")) { header("Content-Disposition: filename=$arquivo" . "%20" . "\n"); // for IE } else { header("Content-Disposition: attachment; filename=$arquivo" . "\n"); //other browsers } //header("Content-Length: " . $size . "\n"); header("Content-transfer-encoding: binary\n"); header("Pragma: no-cache" . "\n"); } } } ?>
PHP Script para testar ping de varios enderecoes em arquivo TXT
Monitoramento simples de servidores
php-scan-rede - scanner de rede simples em PHP
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Como verificar o hash de um arquivo baixado da Internet e como criar um hash
Debian 12 - IPTABLES - removendo NFTABLES
OverWatch 2 - Abrindo portas do jogo no Iptables.
Como instalar o adaptador wifi USB Intelbras ACtion A1200 no Linux Mint
Como normalizar seus arquivos MP3 para que fiquem no mesmo volume
Adaptado Bluetooth USB que funciona no Linux (27)
Erro nas atualizações do Void Linux (0)
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba
[Shell Script] Tire screenshots com Scrot facilmente com Zscrot
[Shell Script] DioPSI - Script multidistro para instalar programas
[Shell Script] ARS Vídeos - Cortador de vídeos e webcam shooter