クライアント IP の取得は実際には簡単な作業ではありません。IP スプーフィングとプロキシの問題により、クライアント IP の取得の信頼性が損なわれ、100% 正確であることは不可能ですが、私たちは依然として、より完全な取得方法を見つけようとしています。クライアントの IP メソッド。PHP を使用して IP を取得する方法はたくさんあります。ここでは、getenv() と strcasecmp() という 2 つの関数を使用します。変数の場合、値を取得できる場合は値が返され、そうでない場合は false が返されます。
$_SERVER はサーバーのスーパー グローバル変数配列です。$_SERVER['REMOTE_ADDR'] を使用してクライアントの IP アドレスを取得することもできます。 2 つの違い その理由は、getenv が IIS isapi モードで実行される PHP をサポートしていないためです。strcasecmp(string1, string2) 文字列関数は、string1 と string2 が等しい場合に 0 を返します。 string1 が string2 より大きい場合、0 より大きい数値が返されます。0 より小さい場合は、0 より小さい数値が返されます。
関数は最初に顧客の IP を使用します。確立されていない場合は、プロキシ メソッドの使用を試みます。機能しない場合は、REMOTE_ADDR を使用します。
マルチプロキシ コードと同様の、IP スプーフィングを考慮した IP 検出の詳細な方法も確認しました。 1. を取得します。プロキシ サーバーを使用せずに PHP でクライアント IP を取得します:
REMOTE_ADDR = クライアント IP
HTTP_X_FORWARDED_FOR = 値がないか、表示されません 2. 透過的プロキシ サーバーを使用します 状況: 透過的プロキシREMOTE_ADDR = 最後のプロキシ サーバー IPHTTP_X_FORWARDED_FOR = クライアントの実際の IP IP (複数のプロキシ サーバーを経由する場合、この値は同様です: 221.5.252.160、203.98.182.163、203.129.72.215)
REMOTE_ADDR = 最後のプロキシ サーバー IP
この場合、クライアントの実際の IP は隠されていますが、アクセス オブジェクトには公開されます。クライアントは、それらにアクセスするためにプロキシ サーバーを使用します
4。不正なプロキシ サーバーを使用する状況: 歪んだプロキシ
REMOTE_ADDR = プロキシ サーバー IP
この場合、クライアントがプロキシ サーバーを使用していることも明らかになりますが、クライアントの実際の IP を置き換えるために偽のランダム IP (220.4.251.159) が作成されます。 5. 匿名性の高い PHP を使用します。クライアントIPを取得するプロキシサーバー: 高匿名性プロキシ(エリートプロキシ)
REMOTE_ADDR = プロキシサーバーIP
HTTP_X_FORWARDED_FOR = 値なしまたは表示なし
REMOTE_ADDRであってもHTTP_FORWARDED_FORであっても、これらのヘッダー ブラウザが異なるためメッセージが取得できない場合がありますしたがって、$_SERVER["REMOTE_ADDR"] および $_SERVER["HTTP_X_FORWARDED_FOR"] を使用して PHP によって取得される値は、null であるか、または「不明な」値である可能性があります。上記は、ユーザークライアントの実際の IP を取得するために編集者が紹介した PHP ソリューションです。ご質問があれば、メッセージを残してください。編集者がすぐに返信します。また、PHP 中国語 Web サイトをサポートしていただきありがとうございます。
ユーザークライアントの実際の IP を取得するための PHP ソリューションに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。