クライアント IP の取得は、実際には簡単な作業ではありません。IP スプーフィングやプロキシの問題により、クライアント IP の取得の信頼性が損なわれる可能性があり、100% 正確に取得することはできません。しかし、当社では、より完全な方法を使用して顧客の IP を取得するよう努めています。以下のエディタでは、ユーザーのクライアントの実際の IP を取得するための PHP の方法を紹介します。IP スプーフィングと代理店の問題のため、クライアントの IP を取得するのは実際には簡単な作業ではありません。これは簡単な作業ではありません。IP の信頼性が損なわれるため、100% 正確であることはできません。しかし、私たちは、クライアントの実際の IP を取得するためのより完全な方法を模索しています。php を使用して 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);
ここでは、getenv() と strcasecmp() という 2 つの関数が使用されており、値を取得できる場合は、それを返します。
$_SERVER これはサーバーのスーパー グローバル変数配列です。$_SERVER['REMOTE_ADDR'] を使用してクライアントの IP アドレスを取得することもできます。この 2 つの違いは、getenv がサポートしていないことです。 IIS の isapi モードで実行される php.
strcasecmp(string1, string2) 文字は、string1 と string2 が等しい場合に、より大きい数値である 0 を返します。 0 より小さい場合は、関数は最初に顧客の IP を使用します。それが機能しない場合は、プロキシを使用します。 REMOTE_ADDR.
IP スプーフィングと複数のプロキシ コードを考慮した、より詳細な IP 検出方法も見ました。 方法は同様です。 1. 使用されません プロキシ サーバーの PHP がクライアントを取得します。 IP:
REMOTE_ADDR = クライアントIPHTTP_X_FORWARDED_FOR = 値がないか、表示されません
2. 透過プロキシサーバーを使用する状況: 透過プロキシREMOTE_ADDR = 最後のプロキシサーバーIP HTTP_X_FORWARDED_FOR = クライアントの実際のIP (複数のプロキシ サーバーを通過する場合、この値は同様です: 221.5.252.160、203.98.182.163、203.129.72.215)
このタイプのプロキシ サーバーは、依然としてクライアントの実際の IP をアクセス オブジェクトに送信しますが、本当の身元を隠すことはできません。REMOTE_ADDR = 最後のプロキシ サーバー IP
HTTP_X_FORWARDED_FOR = プロキシ サーバー IP (複数のプロキシ サーバー経由、この値は次のようになります)。 .182.163, 203.98.182.163, 203.129.72.215)4不正なプロキシ サーバーの使用状況: 歪んだプロキシ
REMOTE_ADDR = プロキシ サーバー IPHTTP_X_FORWARDED_FOR = ランダム IP (複数のプロキシ サーバーを通過する場合、この値は同様です: 220.4.251.159、203.98.182.163、203.129.72.215)
この場合、クライアントはプロキシ サーバーを使用していますが、クライアントの実際の IP ではなく偽のランダム IP (220.4.251.159) を捏造してそれを欺いていることも明らかになります
REMOTE_ADDR = プロキシ サーバー IP
HTTP_X_FORWARDED_FOR = 値がない、または表示されません
php
登録とログインインターフェースの実装事例
php
array_key_exists()とisset()の違いphpチャットルーム構築の実践ウェブソケット上
以上がユーザークライアントの実際のIPを取得するPHPソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。