PHP はユーザークライアントの実際の IP をどのように取得しますか?クライアントの IP を取得することは実際には簡単な作業ではありません。IP スプーフィングやプロキシの問題により、クライアントの IP 取得の信頼性が損なわれ、100% 正確であることは不可能です。ただし、顧客の IP を取得するために、より完全な方法を使用するように努めています。以下では、編集者が PHP でユーザーのクライアントの実際の IP を取得する方法を共有します。これが皆さんの役に立つことを願っています。
クライアント IP の取得は実際には簡単な作業ではありません。IP スプーフィングやプロキシの問題があるため、クライアント IP の取得の信頼性は損なわれ、100% 正確であるとは限りません。クライアントの実際の IP を取得する方法
function getIp(){ if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return($ip);
を使用して IP を取得する方法はたくさんあります。ここでは、2 つの関数、getenv() と strcasecmp() を説明する必要があります。システム環境変数を取得します。値が取得できる場合は値が返され、そうでない場合は false が返されます。
$_SERVER はサーバーのスーパー グローバル変数配列であり、クライアントの IP アドレスも $_SERVER[ を使用して取得できます。 'REMOTE_ADDR'] 両方 違いは、getenv が IIS isapi モードでの PHP の実行をサポートしていないことです。strcasecmp(string1, string2) 文字列関数は、それらが等しい場合に 0 を返します。 string1 が string2 より大きい場合は 0 より大きい数値が返され、0 より小さい場合は 0 より小さい数値が返されます。
関数は最初に顧客の IP を使用します。確立されていない場合は、プロキシ メソッドの使用を試みます。機能しない場合は、REMOTE_ADDR を使用してください。
IP の偽装がマルチプロキシ コードに似ていることを考慮して、IP を検出する詳細な方法も見ました。 1. プロキシ サーバーを使用せずにクライアント IP を取得します。 :
REMOTE_ADDR = クライアントIPHTTP_X_FORWARDED_FOR = 値なしまたは表示なし
2. 透過プロキシサーバーを使用する場合: 透過プロキシHTTP_X_FORWARDED_FOR = クライアントの実際のIP (通過時)複数のプロキシ サーバーの場合、この値は同様です: 221.5.252.160、203.98.182.163、203.129.72.215) このタイプのプロキシ サーバーは依然としてクライアントの実際の IP をアクセス オブジェクトに送信するため、本当の身元を隠すという目的を達成できません
。
3. 通常の匿名プロキシサーバーの PHP を使用してクライアント IP を取得する: 匿名プロキシ
HTTP_X_FORWARDED_FOR = プロキシサーバー IP (複数のプロキシサーバーを経由する場合、この値は同様です: 203.98.182.163) 、203.98.182.163、203.129.72.215)
この場合、クライアントの実際の IP は隠されていますが、クライアントがそれらにアクセスするためにプロキシ サーバーを使用していることがアクセス オブジェクトに明らかになります。不正なプロキシ サーバーの数: Distorting Proxies
REMOTE_ADDR = プロキシ サーバー IP
この中でこの場合、クライアントがプロキシ サーバーを使用していることも判明しますが、偽のランダム IP (220.4.251.159) を捏造してクライアントの実際の IP を置き換えます
5. 匿名性の高いプロキシ サーバーの PHP を使用して取得します。クライアント IP: 高匿名性プロキシ (エリート プロキシ)
REMOTE_ADDR = プロキシ サーバー IP
関連する推奨事項:
php IPアドレスマスクの計算方法
php IP Get City API (Innocent IP Database)php IPおよびIPセグメントのアクセス制限コード_PHPチュートリアル
以上がPHPでユーザークライアントの実際のIPを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。