この記事では主に、参考値となる実クライアントの実IP(REMOTE_ADDR、HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR)をPHPで取得する方法を紹介します。以下のエディターで見てみましょう
REMOTE_ADDR は、クライアントがサーバーと「ハンドシェイク」するときの IP です。 「匿名プロキシ」が使用されている場合、REMOTE_ADDR にはプロキシ サーバーの IP が表示されます。
HTTP_CLIENT_IP は、プロキシ サーバーによって送信される HTTP ヘッダーです。 「スーパー匿名プロキシ」の場合は、値 none が返されます。同様に、REMOTE_ADDR はこのプロキシ サーバーの IP に置き換えられます。
$_SERVER['REMOTE_ADDR']; //アクセス側(ユーザーの場合もプロキシの場合もある) IP
$_SERVER['HTTP_CLIENT_IP'] //プロキシの側(プロキシの場合もある) ) 存在し、偽造可能)
$_SERVER['HTTP_X_FORWARDED_FOR'] //ユーザーがプロキシとして使用している IP (存在する可能性があり、偽造可能)
3つの値は次のとおりです:
1. プロキシサーバーが使用されていない場合:
REMOTE_ADDR = あなたのIP HTTP_VIA = 値なしまたは表示なし HTTP_X_FORWARDED_FOR = 値なしまたは表示なし2. 透過的プロキシ サーバーの使用 状況: 透過的プロキシ
REMOTE_ADDR = 最後のプロキシ サーバー IPHTTP_VIA = プロキシ サーバー IPHTTP_X_FORWARDED_FOR = 実際の IP、複数のプロキシ サーバーを経由する場合、この値は次のようになります。 203.98.182.163、203.98.182.163、203.129.72.215。 このタイプのプロキシ サーバーは依然としてあなたの情報を訪問者に転送するため、あなたの本当の身元を隠すという目的を達成することはできません。3. 通常の匿名プロキシ サーバーを使用する場合: 匿名プロキシ
REMOTE_ADDR = 最後のプロキシ サーバー IPHTTP_VIA = プロキシ サーバー IPHTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次と同様です。次のとおりです: 203.98.182.163、203.98.182.163、203.129.72.215。 実際の IP を隠しますが、アクセスにプロキシ サーバーを使用していることを訪問者に明らかにします。4. 不正なプロキシ サーバーの使用: 歪んだプロキシ
REMOTE_ADDR = プロキシ サーバー IPHTTP_VIA = プロキシ サーバー IPHTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次のようになります。 :203.98.182.163、203.98.182.163、203.129.72.215。 訪問者に、プロキシ サーバーを使用していることを伝えますが、実際の IP の代わりに偽のランダム IP を作成してなりすますようにしてください。5. 高匿名性プロキシ サーバーを使用する場合: 高匿名性プロキシ (エリート プロキシ)
REMOTE_ADDR = プロキシ サーバー IPHTTP_VIA = 値なしまたは表示なしHTTP_X_FORWARDED_FOR = 複数の場合、値なしまたは表示なしプロキシ サーバーとして機能する場合、この値は次のようになります: 203.98.182.163、203.98.182.163、203.129.72.215。 プロキシ サーバーを使用してオブジェクトに直接アクセスしているのと同じように、すべての情報をプロキシ サーバーの情報で完全に置き換えます。//获取用户IP $ip = ''; foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_FROM', 'REMOTE_ADDR') as $v) { if (isset($_SERVER[$v])) { if (! preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $_SERVER[$v])) { continue; } $ip = $_SERVER[$v]; } } uset($ip,$v);