ホームページ  >  記事  >  バックエンド開発  >  ユーザークライアントの実際のIPを取得するPHPソリューション

ユーザークライアントの実際のIPを取得するPHPソリューション

高洛峰
高洛峰オリジナル
2016-12-20 15:48:531065ブラウズ

クライアント 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 = 最後のプロキシ サーバー IP

HTTP_X_FORWARDED_FOR = クライアントの実際の IP IP (複数のプロキシ サーバーを経由する場合、この値は同様です: 221.5.252.160、203.98.182.163、203.129.72.215)

このタイプのプロキシ サーバーは依然としてクライアントの実際の IP をアクセス オブジェクトに送信するため、目的を達成できません

3. 通常の匿名プロキシ サーバーの PHP を使用してクライアント IP を取得する: 匿名プロキシ


REMOTE_ADDR = 最後のプロキシ サーバー IP

HTTP_X_FORWARDED_FOR = プロキシ サーバー IP (複数のプロキシ サーバーを経由する場合、この値同様です: 203.98.182.163、203.98.182.163、203.129.72.215)

この場合、クライアントの実際の IP は隠されていますが、アクセス オブジェクトには公開されます。クライアントは、それらにアクセスするためにプロキシ サーバーを使用します

4。不正なプロキシ サーバーを使用する状況: 歪んだプロキシ

REMOTE_ADDR = プロキシ サーバー IP

HTTP_X_FORWARDED_FOR = ランダム IP (複数のプロキシ サーバーを経由する場合、この値は同様です: 220.4 .251.159、203.98.182.163、203.129.72.215)

この場合、クライアントがプロキシ サーバーを使用していることも明らかになりますが、クライアントの実際の 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 サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。