Bir proxy üzerinden bağlanan müşteri bulma IP adresi

4 Cevap php

Bir proxy sunucu üzerinden web sitenize bağlı bir istemci IP adresi toplamak için bir yolu var mı?

Tüm kurulum bir iç LAN ve sysadmin aracılığıyla, ben de vekil makine üzerinde kontrole sahip. Ben web sitesi, sunucu tarafı için PHP5 kullanıyorum.

I $_SERVER['REMOTE_ADDR'] PHP çalıştı ama bu değişken sadece proxy IP adresini saklar.

Herhangi bir fikir?

4 Cevap

(Php) standart bir çözümdür:

if ($_SERVER['HTTP_X_FORWARD_FOR']){
 $ip = $_SERVER['HTTP_X_FORWARD_FOR'];} 
else{ $ip = $_SERVER['REMOTE_ADDR'];}

ilk cevap diyor ama bu hepsi aslında ayarlanan başlığına bağlıdır.

Bu vekil bağlıdır. Bazı vekiller orijinal IP adresi, X-Forwarded-For başlığını veren bir başlık eklemek, ancak çoğu şirket nadir iç ağ yapısını gizlemek yakınlık kullanır olduğunu verilmiştir. Bu durumda daha sonra bunu kolayca yapmak mümkün olacak değiliz.

Eğer vekil üzerinde kontrol varsa o zaman bu başlık eklemek için nasıl görmek için vekil belgeleri okumak için zamanı.

Bu kod, bir proxy üzerinden bağlandığını istemcinin IP adresini almak için kullanılabilir.

  public static String getClientIpAddr(HttpServletRequest request) {  
     String ip = request.getHeader("X-Forwarded-For");  

     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = request.getHeader("Proxy-Client-IP");  
     }  

     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = request.getHeader("WL-Proxy-Client-IP");  
     }  
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = request.getHeader("HTTP_CLIENT_IP");  
     }  

     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = request.getHeader("HTTP_X_FORWARDED_FOR");  
     }

     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = request.getRemoteAddr();  
     }  

     return ip;  
  }  

Ama vekil saydam olduğunda algılar.

Aşağıda HTTP vekil hakkında bilgiler:

  1. Herhangi bir proxy sunucusu kullanarak:

    • Istemci request.getRemoteAddr() = IP adresi
    • request.getHeader("HTTP_X_FORWARDED_FOR") Hayır değerini veya Hayır ekran =
  2. Şeffaf proxy kullanın:

    • Istemci HTTP_X_FORWARDED_FOR = Gerçek IP adresi
  3. Kullanım Normal Anonymous Proxy:

    • Proxy sunucusu request.getRemoteAddr() = IP adresi
    • Proxy sunucusu HTTP_X_FORWARDED_FOR = IP adresi

X-Forwarded-For istemcinin IP adresini almak için tek yoldur. Lütfen vekaleten bu etkinleştirmek için bir yol olup olmadığını kontrol edin.

(Istek birden çok proxy geçtiğinde), bazı proxy, size mevcut XFF başlığını nasıl işleneceğini seçeneği verir. Burada dikkate gerekenler,

  1. Istemci adresi (ACL veya oran-sınırlayıcı gibi) güvenlik / güven amaçlı ise, mevcut XFF başlık vekaleten düştü olmalıdır.
  2. Adres bilgileri için sadece (günlük, hata ayıklama) ise, virgülle ayırarak mevcut xff, akran adresini eklemeniz gerekir. Listede ilk IP müşterinin IP olacaktır.