Bu günlerde forumda çok sık konu açıyorum umarım başıma bir iş gelmez :)
Arkadaşlar şimdi benim şöyle bir problemim var.
Üyenin gerçek ip yani modeminin ip adresini almam gerekiyor. Bazı özel sitelerde olduğu gibi.
Nette araştırdım aşağıda ki fonksiyondan bahsediyorlar hep.
function GetIP(){
if(getenv("HTTP_CLIENT_IP")) {
$ip = getenv("HTTP_CLIENT_IP");
} elseif(getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
if (strstr($ip, ',')) {
$tmp = explode (',', $ip);
$ip = trim($tmp[0]);
}
} else {
$ip = getenv("REMOTE_ADDR");
}
return $ip;
}
$ip_adresi = GetIP();
if (empty($ip_adresi)){
exit ("IP adresiniz alınamadı!");
}else{
echo "IP Adresiniz: $ip_adresi";}
Buraya kadar sıkıntı yok. ip adresimi görebiliyorum fakat, proxyleri aktif ettiğim zaman bu ip adresi proxy adresiyle değişiyor. Sistemin bunu fark edip uyarmasını istiyorum.
Yine internette proxy adresini görmek için
$_SERVER['REMOTE_ADDR']; komutunu buldum. Buradan yola çıkarak
if ($ip_adresi != $proxy)
echo "Proxy'leri devre dışı bırakın!"; Diye yazdım. Ama dediğim gibi sıkıntı proxy aktif edilince gerçek ip'nin proxy ile değişiyor olması. Bunu nasıl gerçekleştirebilirim ya da daha basit bir yolu varsa anlatırsanız sevinirim lakin ilk yazdığım komuttan hiç bir şey anlamış değilim.
Proxy ile yüklenen bir sayfada eski ip adresini görememeniz normal yani. Çünkü php istemcisi kodları baştan aşağı tarar ve işlemleri döndürür. Sayfa yüklendiğinde işlem biter. Eğer proxy aktif ederseniz ve sayfayı yenilerseniz, eski sonuca bakmaksızın yeni işlemlere başlar. Ancak bir veritabanı bağlantısı, cookie veya session ile eski verilerinizi kontrol edebilirsiniz.
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //proxy kullanmıyorsa alacagın ip
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //proxy kullanıyorsa çekeceği ip adresi
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
açıklamalara yazdım gerçi ama anlatayım yukardaki fonksiyon ile high+k olmayan proxylere ait ip adresini alırsın ancak yüksek korumalı özel proxylerde http_x_forwarded_for kısmı da boş olacağından alacağın değer gene proxy adresi olacaktır.umarım anlatabilmişimdir.Sorun olursa yazarsın cevaplarım.
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //proxy kullanmıyorsa alacagın ip
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //proxy kullanıyorsa çekeceği ip adresi
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
açıklamalara yazdım gerçi ama anlatayım yukardaki fonksiyon ile high+k olmayan proxylere ait ip adresini alırsın ancak yüksek korumalı özel proxylerde http_x_forwarded_for kısmı da boş olacağından alacağın değer gene proxy adresi olacaktır.umarım anlatabilmişimdir.Sorun olursa yazarsın cevaplarım.
Gayet iyi anlattınız hıcam. Teşekkür ederim. Fakat peki ben şunu nasıl yapabilirim:
Kullanıcı üye girişi yaptığında bir post ekranı ile karşılaşacak eğer oradan örneğin mesaj gönderirken ip adresini o yazmadan alabilmem gerek ve bu ip adresi proxy olmamalı.
$ip_adresi = $ip;
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //proxy kullanmıyorsa alacagın ip
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //proxy kullanıyorsa çekeceği ip adresi
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
yukarıda verdiğim fonksiyonu db baglantısı yaptıgın config.php dosyana ekle ondan sonra post yapacagın alanda önce $ip=getRealIpAddr();?>ip değişkenine atayın sonra diyerek gizli bir input yaratarak value alanına fonksiyonun verdiği ip adresini atayın buradan post ettiğiniz bilgileri çektiğiniz yerde $ip=$_Post["ip"]; şeklinde posttan gelen datayı cekip veritabanınıza yazdırabilir yada ne istiyorsanız onu yapabilirsiniz.tabi tüm bunları yapmadan önce post edeceğiniz sayfaya fonkisyonun ekli oldugu config sayfasını include etmeniz gerekir