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

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

墨辰丷
リリース: 2023-03-28 21:10:04
オリジナル
1957 人が閲覧しました

クライアント 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 = クライアントIP

HTTP_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 をアクセス オブジェクトに送信しますが、本当の身元を隠すことはできません。


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

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

HTTP_X_FORWARDED_FOR = プロキシ サーバー IP (複数のプロキシ サーバー経由、この値は次のようになります)。 .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 であっても、これらのヘッダー メッセージは取得できない場合があります。異なるブラウザーと異なるネットワーク デバイスは異なる IP ヘッダー メッセージを送信する可能性があるため、$_SERVER["REMOTE_ADDR"] および $_SERVER["HTTP_X_FORWARDED_FOR"] を使用して PHP によって取得される値は、null 値または「不明な」値である可能性があります。要約: 以上がこの記事の全内容です。皆様の学習に役立つことを願っています。

関連する推奨事項:

php

登録とログインインターフェースの実装事例

php

array_key_exists()とisset()の違い

phpチャットルーム構築の実践ウェブソケット上


以上がユーザークライアントの実際のIPを取得するPHPソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート