• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skin

[PHP] Mostrar e guardar IP

20 mensagens neste tópico

//http://joaopedropereira.com/
// IP Saver
$ip = $_SERVER['REMOTE_ADDR'];

//Escreve o IP na página.
echo "$ip";

//Hora
$hora = date("H:i:s");

//Data
$data = date("j/m/y");

//Abre o ficheiro ip.skin
$fp = fopen("ip.skin", "a");

//Escreve no ficheiro aberto o IP a data e a hora de entrada
fputs ($fp, "IP: $ip - Data: $data - Hora: $hora \r\n");

//Fecha o ficheiro
fclose($fp);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse código é bastante simples, aparece em qualquer site para principiantes, mas mesmo assim pode dar jeito. O problema é que é bastante fácil "saltar" uma verificaçao por IP (do género os bans por IP dos fóruns ou assim), usando um "proxy" como o Proxomitron (a minha IP actual é ICEBRAIN PC, e qualquer site do género www.showmyip.com mostra-me essa). Conhecem alguma maneira de criar um registo que nao possa ser falsificado tao facilmente? Eu pensei em fazer um traceroute, mas ainda nao implementei nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para descobrir o verdadeiro IP de um usuário mesmo que ele estiver a utilizar um proxy é só chamar $_SERVER['HTTP_X_FORWARDED_FOR']; mas não é 100% garantido que vai retornar o IP do usuário e pode ser facilmente enganado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas esse método não mostra o IP das pessoas que NÃO estejam a usar proxy. Pelo menos a mim não mostrou. Não mostrou nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas esse método não mostra o IP das pessoas que NÃO estejam a usar proxy. Pelo menos a mim não mostrou. Não mostrou nada.

Porque é preciso adicionar mais algumas variaveis

<?php 
		if (isset ($_SERVER['HTTP_X_FORWARDED_FOR']))
		{ $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; }
		elseif (isset ($_SERVER['HTTP_CLIENT_IP']))
		{ $IP = $_SERVER['HTTP_CLIENT_IP']; }
		elseif (isset ($_SERVER['HTTP_FROM ']))
		{ $IP = $_SERVER['HTTP_FROM']; }
		elseif (isset ($_SERVER['REMOTE_ADDR']))
		{ $IP = $_SERVER['REMOTE_ADDR']; }
echo $IP;
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito obrigado, kingless. Bem precisava disso para um scriptzinho que estou a fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@skin, tens de ter em conta que \r\n só dá para windows, \n para linux e \r para mac.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@skin, tens de ter em conta que \r\n só dá para windows, \n para linux e \r para mac.

Errado.... 

\r    > não serve para nova linha

\r\n  > nova linha no windows e linux (acho que mac também)

\n    > nova linha no linux e mac etc

//Testado no Linux e Windows
<?
echo "bla bla bla\r\nbla1 bla1 bla1\nbla2 bla2 bla2";
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

prefiro fzr

echo '<br>';

ou echo '<p> </p>';

Não se deve juntar PHP com HTML :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu como ja disse num outro topico a minha programação em php é bastante má, ou seja não tenho boas pratics de programação.

Em quase todos os sites que faço vejo me obrigado a usar html senão como é que apresento as páginas? E já agora porque é que não se deve usar html junto com php?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu como ja disse num outro topico a minha programação em php é bastante má, ou seja não tenho boas pratics de programação.

Em quase todos os sites que faço vejo me obrigado a usar html senão como é que apresento as páginas? E já agora porque é que não se deve usar html junto com php?

Por razão nenhuma... ficas com o script mais organizado...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim, mas não tem de estar obrigatóriamente misturado com o php. Podes por exemplo, guardar o html num ficheiro à parte e depois chamá-lo com um include..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Include ou Require

A difrença entre a expressão include e a expressão require reside na forma como lidam com os erros encontrados no script externo. Enquanto que a expressão include apenas dá um "Warning" a expressão require produz um "Fatal Error".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@kingless, eu tinha lido num site de PHP que era assim p fxr no mac. Se estou enganado, peço desculpas, (my bad) ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

aqui fica um mais complexo

function validip($ip)
{
if (!empty($ip) && $ip == long2ip(ip2long($ip)))
{
	// reserved IANA IPv4 addresses
	// http://www.iana.org/assignments/ipv4-address-space
	$reserved_ips = array (
			array('0.0.0.0','2.255.255.255'),
			array('10.0.0.0','10.255.255.255'),
			array('127.0.0.0','127.255.255.255'),
			array('169.254.0.0','169.254.255.255'),
			array('172.16.0.0','172.31.255.255'),
			array('192.0.2.0','192.0.2.255'),
			array('192.168.0.0','192.168.255.255'),
			array('255.255.255.0','255.255.255.255')
	);

	foreach ($reserved_ips as $r)
	{
			$min = ip2long($r[0]);
			$max = ip2long($r[1]);
			if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
	}
	return true;
}
else return false;
}

function mostrarip() {
   if (isset($_SERVER)) {
     if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && validip($_SERVER['HTTP_X_FORWARDED_FOR'])) {
       $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
     } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && validip($_SERVER['HTTP_CLIENT_IP'])) {
       $ip = $_SERVER['HTTP_CLIENT_IP'];
     } else {
       $ip = $_SERVER['REMOTE_ADDR'];
     }
   } else {
     if (getenv('HTTP_X_FORWARDED_FOR') && validip(getenv('HTTP_X_FORWARDED_FOR'))) {
       $ip = getenv('HTTP_X_FORWARDED_FOR');
     } elseif (getenv('HTTP_CLIENT_IP') && validip(getenv('HTTP_CLIENT_IP'))) {
       $ip = getenv('HTTP_CLIENT_IP');
     } else {
       $ip = getenv('REMOTE_ADDR');
     }
   }

   return $ip;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não? No meu não teve problemas, tirando o facto de me aparecer ::1 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora