Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

kingless

Localização através do IP

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.