[Laravel] IP 가져오기 updated_at: 2024-12-15 08:14

IP획득 하기

일반적인 IP 획득

  • 문서상에서는 아래와 같이 설명하고 있다.
  • 1-1
class UserController extends Controller
{
  public function index(Request $request)
  {
    $clientIP = $request->ip();   
  }
}
  • 1-2
$clientIP = \Request::ip();
  • 1-3
$clientIP = \Request::getClientIp(true);
  • 하지만 실제로 하면 잘 안될 경우가 많습니다.
  • 아래는 제가 사용하는 소스입니다.
private function storeToLog($user) {
  $http_referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER']:"";
  $http_origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN']:"";
  $http_user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT']:"";
  $remote_addr = $this->getRealIpAddr();
}

/**
* 아래 부분이 실제 사용자 IP를 가져오는 부분입니다.
*/
private function getRealIpAddr(){
  if(!empty($_SERVER['HTTP_CLIENT_IP']) && getenv('HTTP_CLIENT_IP')){
    return $_SERVER['HTTP_CLIENT_IP'];
  }else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && getenv('HTTP_X_FORWARDED_FOR')){
    return $_SERVER['HTTP_X_FORWARDED_FOR'];
  }else if(!empty($_SERVER['REMOTE_HOST']) && getenv('REMOTE_HOST')){
    return $_SERVER['REMOTE_HOST'];
  }else if(!empty($_SERVER['REMOTE_ADDR']) && getenv('REMOTE_ADDR')){
    return $_SERVER['REMOTE_ADDR'];
  }
  return false;
}

혹은 아래와 같은 것도 있다.

private function getIp(){
  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 $ip){
        $ip = trim($ip); // just to be safe
        if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false){
          return $ip;
        }
      }
    }
  }
  return request()->ip(); // it will return the server IP if the client IP is not found using this method.
}

Table of contents 목차

평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글