kingless 0 Denunciar post Postado Fevereiro 9, 2007 Acabei de criar um script que detecta o ip, país, cidade, estado, caixa postal, imagem da bandeira do páis, entre outros... aqui fica o código :) Download: http://www.kingless.net/download.php?filename=ip.php Source code: http://www.kingless.net/download.php?filename=ip.php;source <?php /////////////////////////////////////////////////////| /////// Localização através do IP //////// | Base de dados em ////// by kingless /////// | http://www.ip-adress.com/ ///// <blastelf@gmail.com> ///// S//////////////////////// ///////////////////////////////////////////////////// G/ Caso ocorra algum // //// Este script detecta o país, cidade, estado //// U/ erro no script // /// caixa postal (só de alguns países), isp, /// B/ envie-me um email // // imagem da bandeira do país... /// <blastelf@gmail.com> // ///////////////////////////////////////////////////////////////////////////////class ip { var $timeout = 5; var $ip = ''; var $pais = ''; var $cidade = ''; var $estado = ''; var $isp = ''; var $img = ''; var $org = ''; var $caixa_postal = ''; var $latitude = ''; var $longitude = ''; var $vars = array( 'pais' => 'IP country', 'estado' => 'IP state', 'cidade' => 'IP city', 'caixa_postal' => 'IP postcode', 'latitude' => 'latitude', 'longitude' => 'longitude', 'isp' => 'isp', 'org' => 'organization' ); function ip() { $data = $this->getData(); if(empty( $data )) { return false; } $data = $this->parse_data( $data ); $this->setVars( $data ); return true; } function getData() { $fp = fsockopen( 'www.ip-adress.com', 80, $errno, $errstr, 5 ); if(!$fp) { return false; } $query = "iq={$_SERVER['REMOTE_ADDR']}&submit=lookup+any+ip"; $out = "POST / HTTP/1.0\r\n"; $out .= "Host: www.ip-adress.com\r\n"; $out .= "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n"; $out .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"; $out .= "Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3\r\n"; $out .= "Accept-Encoding: gzip,deflate\r\n"; $out .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"; $out .= "Keep-Alive: 300\r\n"; $out .= "Connection: keep-alive\r\n"; $out .= "Referer: http://www.ip-adress.com/\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "Content-Length: ". strlen( $query ) ."\r\n\r\n"; $out .= "$query\r\n"; fwrite($fp, $out); $data = ''; while (!feof($fp)) { $data .= fgets($fp, 13422); } fclose( $fp ); return $data; } function parse_data( $data ) { foreach( $this->vars as $set => $var ) { if($exp = explode( '<font face="verdana" size="2">'. $var .':</font></th>', $data )) { if(!empty( $exp[1] )) { $exp = explode( '<td bgcolor="#FFFFCC"><font face="verdana" size="2">', $exp[1] ); $res[$set] = explode( '</font></td>', $exp[1] ); } } if($set == "pais") { $exp = explode( '<font face="verdana" size="2">'. $var .':</font></th>', $data ); $exp = explode( '<td bgcolor="#FFFFCC">', $exp[1] ); $exp = explode( '<font face="verdana" size="2">', $exp[1] ); preg_match( '<img src="(.*?)">', $exp[1], $img ); $exp = explode( '<img src="'. $img[1] .'">', $exp[1] ); $res["img"] = "http://www.ip-adress.com". $img[1]; $res[$set] = explode( '</font>', $exp[1] ); } } return $res; } function setVars( $data ) { foreach( $this->vars as $var => $valor ) { if(!empty( $data[$var][0] )) { $this->$var = trim($data[$var][0]); } } $this->img = $data['img']; $this->ip = $_SERVER['REMOTE_ADDR']; }}?> Exemplo: <?phpinclude( 'ip.php' );$ip = new ip();$msg[] = "<b>Meu IP:</b> $ip->ip";$msg[] = "<b>País:</b> $ip->pais <img src=\"$ip->img\">";$msg[] = "<b>Estado/Provincia:</b> $ip->estado";$msg[] = "<b>Cidade:</b> $ip->cidade";$msg[] = "<b>Caixa Postal:</b> $ip->caixa_postal";$msg[] = "<b>Latitude:</b> $ip->latitude";$msg[] = "<b>Longitude:</b> $ip->longitude";$msg[] = "<b>ISP:</b> $ip->isp";$msg[] = "<b>Organização:</b> $ip->org";echo implode( "\r\n<br />", $msg );?> http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
kingless 0 Denunciar post Postado Fevereiro 9, 2007 Parece que o script não esta a funcionar como eu esperava :(, eu pensava que fsockopen fosse buscar o conteúdo ao site com o ip do utilizador e não do servidor ¬¬ , mas o que interessa é o código :D Tentei resolver o problema alterando os headers e até mesmo usando a biblioteca CURL do PHP mas não funcionou, vou deixar aqui os códigos que utilizei para tentar resolver o problema. Headers que alterei: $var = "iq=ok&submit=". urlencode( "lookup any ip" ); $out = "POST / HTTP/1.0\r\n"; $out .= "Host: localhost\r\n"; $out .= "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "Content-Length: ". strlen( $var ) ."\r\n\r\n"; $out .= "$var\r\n"; CURL LIB: <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.ip-address.com/");curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5 );curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, "iq=72.14.207.99&submit=". urlencode( "lookup any ip" ));curl_setopt($ch, CURLOPT_TIMEOUT, 5 );curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); echo $data; Acho que não há mais nada que se possa fazer, mas é sempre bom programar "for fun" http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif :rolleyes: Compartilhar este post Link para o post Compartilhar em outros sites
kingless 0 Denunciar post Postado Fevereiro 9, 2007 O problema já foi resolvido :rolleyes: O script já esta a funcionar muito bem :D Solução Headers: $query = "iq={$_SERVER['REMOTE_ADDR']}&submit=lookup+any+ip"; $out = "POST / HTTP/1.0\r\n"; $out .= "Host: www.ip-adress.com\r\n"; $out .= "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n"; $out .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"; $out .= "Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3\r\n"; $out .= "Accept-Encoding: gzip,deflate\r\n"; $out .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"; $out .= "Keep-Alive: 300\r\n"; $out .= "Connection: keep-alive\r\n"; $out .= "Referer: http://www.ip-adress.com/\r\n"; $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; $out .= "Content-Length: ". strlen( $query ) ."\r\n\r\n"; $out .= "$query\r\n";Tenho que agradecer ao membro "djthyrax" da comunidade Portugal a programar por ter me ajudado a resolver este problema :) Compartilhar este post Link para o post Compartilhar em outros sites
xandesilva 0 Denunciar post Postado Maio 24, 2008 Ola! Nao faz muito tempo que comecei a estudar PHP...e talves seja por isso que nao estou conseguindo fazer este script funcionar... O script ate esta pegando o IP mais nao esta monstrando as outras infomacoes...testei este script no seguindo endereco www.intlserv.com/mostralocal.php . Bom, se possivel me ajude a entender o seu script. Compartilhar este post Link para o post Compartilhar em outros sites
nknk 3 Denunciar post Postado Maio 25, 2008 Acho que este script não se adaptaria muito bem a um loop com ips, pq ele faz a conexao com o site e pega os dados, se fossem 1000 ips demoraria, mas de qq forma, como eu devo fazer em um loop? por exemplo eu tenho a variavel $ip="000.000.000.000" como eu faço para saber a localização? EU acho o include fora do loop? E dentro do loop como eu chamo a classe e digo o ip? Compartilhar este post Link para o post Compartilhar em outros sites
Brunck 0 Denunciar post Postado Fevereiro 20, 2010 Aqui não está mostrando os dados. Compartilhar este post Link para o post Compartilhar em outros sites