1

ユーザーの IP アドレスを検出する PHP コードがあります。以下のコードは IP アドレスを返しますが、IP アドレスはパブリック IP ではなく、ローカル ネットワーク IP (10.0.0.1 など) である場合があります。常にパブリック IP を取得するにはどうすればよいですか? ありがとう。ところで、このコードは別の StackOverflow 投稿からのものです。また、このコードは、Apache Web サーバーとは完全に別のネットワークからインターネット経由でアクセスされている Web サイトで使用されています。

if (isset($_SERVER["HTTP_CLIENT_IP"])){  
  $ip = $_SERVER["HTTP_CLIENT_IP"];  
} elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){  
  $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];  
} elseif (isset($_SERVER["HTTP_X_FORWARDED"])){  
  $ip = $_SERVER["HTTP_X_FORWARDED"];  
} elseif (isset($_SERVER["HTTP_FORWARDED_FOR"])){  
  $ip = $_SERVER["HTTP_FORWARDED_FOR"];  
} elseif (isset($_SERVER["HTTP_FORWARDED"])){  
  $ip = $_SERVER["HTTP_FORWARDED"];  
} else {   
  $ip = $_SERVER["REMOTE_ADDR"];  
}
4

1 に答える 1

2

すべてのコードを削除し、以下if(){} else{}をリクエストするだけREMOTE_ADDRです:

 $ip =  $_SERVER["REMOTE_ADDR"];

_SERVER他のすべてのキーはクライアントによってマスクされる可能性があるため、これはユーザーのリモート IP アドレスの唯一の信頼できるソースです。

IPアドレスがまだローカルである場合(そして、ネットワーク内またはローカルVPN上にないクライアントを扱っていることが確実である場合)、サーバーキャッシングシステム(Squid Proxyなど)を扱っている可能性があります。http://www.nineteenlabs.com/2007/08/24/high-anonymous-proxy-squid-25/をご覧ください。

于 2012-05-30T15:57:19.713 に答える