복붙노트

PHP를 사용하여 클라이언트 IP 주소 얻기 [duplicate]

PHP

PHP를 사용하여 클라이언트 IP 주소 얻기 [duplicate]

내 웹 사이트를 사용하는 클라이언트 IP 주소를 얻고 싶습니다. 나는 PHP $ _SERVER superglobal을 사용하고있다 :

$_SERVER['REMOTE_ADDR'];

하지만 이걸 사용하여 올바른 IP 주소를 부여 할 수는 없다는 것을 알았습니다. 나는 나의 IP 주소를 얻고 그것이 나의 IP 주소와 다르다는 것을 본다. 그리고 나는 또한 다음과 같은 몇몇 웹 사이트에서 나의 IP 주소를 볼 수있다.

http://whatismyipaddress.com/

내 PHP 기능을 제공하는 IP 주소를 붙여 넣지 만이 웹 사이트에서는 이에 대한 결과가 표시되지 않습니다. 이 문제는 어떻게 발생하며 클라이언트의 IP 주소는 어떻게 얻을 수 있습니까?

해결법

  1. ==============================

    1.방문자 / 클라이언트의 IP 주소를 얻는 가장 간단한 방법은 $ _SERVER [ 'REMOTE_ADDR'] 또는 $ _SERVER [ 'REMOTE_HOST'] 변수를 사용하는 것입니다.

    방문자 / 클라이언트의 IP 주소를 얻는 가장 간단한 방법은 $ _SERVER [ 'REMOTE_ADDR'] 또는 $ _SERVER [ 'REMOTE_HOST'] 변수를 사용하는 것입니다.

    그러나 때로는 방문자의 정확한 IP 주소를 반환하지 않기 때문에 다른 서버 변수를 사용하여 IP 주소를 가져올 수 있습니다.

    아래의 두 함수는 값이 검색되는 방법과 위치의 차이와 동일합니다.

    getenv ()는 PHP에서 환경 변수 값을 가져 오는 데 사용됩니다.

    // Function to get the client IP address
    function get_client_ip() {
        $ipaddress = '';
        if (getenv('HTTP_CLIENT_IP'))
            $ipaddress = getenv('HTTP_CLIENT_IP');
        else if(getenv('HTTP_X_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
        else if(getenv('HTTP_X_FORWARDED'))
            $ipaddress = getenv('HTTP_X_FORWARDED');
        else if(getenv('HTTP_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        else if(getenv('HTTP_FORWARDED'))
           $ipaddress = getenv('HTTP_FORWARDED');
        else if(getenv('REMOTE_ADDR'))
            $ipaddress = getenv('REMOTE_ADDR');
        else
            $ipaddress = 'UNKNOWN';
        return $ipaddress;
    }
    

    $ _SERVER는 웹 서버에서 생성 한 서버 변수를 포함하는 배열입니다.

    // Function to get the client IP address
    function get_client_ip() {
        $ipaddress = '';
        if (isset($_SERVER['HTTP_CLIENT_IP']))
            $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
        else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
            $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
        else if(isset($_SERVER['HTTP_X_FORWARDED']))
            $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
        else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
            $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
        else if(isset($_SERVER['HTTP_FORWARDED']))
            $ipaddress = $_SERVER['HTTP_FORWARDED'];
        else if(isset($_SERVER['REMOTE_ADDR']))
            $ipaddress = $_SERVER['REMOTE_ADDR'];
        else
            $ipaddress = 'UNKNOWN';
        return $ipaddress;
    }
    
  2. ==============================

    2.PHP 5.3 이상에서는 다음과 같이 할 수 있습니다.

    PHP 5.3 이상에서는 다음과 같이 할 수 있습니다.

    $ip = getenv('HTTP_CLIENT_IP')?:
    getenv('HTTP_X_FORWARDED_FOR')?:
    getenv('HTTP_X_FORWARDED')?:
    getenv('HTTP_FORWARDED_FOR')?:
    getenv('HTTP_FORWARDED')?:
    getenv('REMOTE_ADDR');
    
  3. ==============================

    3.

        $ipaddress = '';
        if ($_SERVER['HTTP_CLIENT_IP'] != '127.0.0.1')
            $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
        else if ($_SERVER['HTTP_X_FORWARDED_FOR'] != '127.0.0.1')
            $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
        else if ($_SERVER['HTTP_X_FORWARDED'] != '127.0.0.1')
            $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
        else if ($_SERVER['HTTP_FORWARDED_FOR'] != '127.0.0.1')
            $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
        else if ($_SERVER['HTTP_FORWARDED'] != '127.0.0.1')
            $ipaddress = $_SERVER['HTTP_FORWARDED'];
        else if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1')
            $ipaddress = $_SERVER['REMOTE_ADDR'];
        else
            $ipaddress = 'UNKNOWN';
    
  4. ==============================

    4.다음은 로컬 및 LAN IP 주소에 필터를 사용하여 IP 주소를 가져 오는 기능입니다.

    다음은 로컬 및 LAN IP 주소에 필터를 사용하여 IP 주소를 가져 오는 기능입니다.

    function get_IP_address()
    {
        foreach (array('HTTP_CLIENT_IP',
                       'HTTP_X_FORWARDED_FOR',
                       'HTTP_X_FORWARDED',
                       'HTTP_X_CLUSTER_CLIENT_IP',
                       'HTTP_FORWARDED_FOR',
                       'HTTP_FORWARDED',
                       'REMOTE_ADDR') as $key){
            if (array_key_exists($key, $_SERVER) === true){
                foreach (explode(',', $_SERVER[$key]) as $IPaddress){
                    $IPaddress = trim($IPaddress); // Just to be safe
    
                    if (filter_var($IPaddress,
                                   FILTER_VALIDATE_IP,
                                   FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)
                        !== false) {
    
                        return $IPaddress;
                    }
                }
            }
        }
    }
    

  5. ==============================

    5.또한 내부 IP 주소에도 잘 작동합니다.

    또한 내부 IP 주소에도 잘 작동합니다.

     function get_client_ip()
     {
          $ipaddress = '';
          if (getenv('HTTP_CLIENT_IP'))
              $ipaddress = getenv('HTTP_CLIENT_IP');
          else if(getenv('HTTP_X_FORWARDED_FOR'))
              $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
          else if(getenv('HTTP_X_FORWARDED'))
              $ipaddress = getenv('HTTP_X_FORWARDED');
          else if(getenv('HTTP_FORWARDED_FOR'))
              $ipaddress = getenv('HTTP_FORWARDED_FOR');
          else if(getenv('HTTP_FORWARDED'))
              $ipaddress = getenv('HTTP_FORWARDED');
          else if(getenv('REMOTE_ADDR'))
              $ipaddress = getenv('REMOTE_ADDR');
          else
              $ipaddress = 'UNKNOWN';
    
          return $ipaddress;
     }
    
  6. from https://stackoverflow.com/questions/15699101/get-the-client-ip-address-using-php by cc-by-sa and MIT license