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

PHPでユーザークライアントの実際のIPを取得する方法

*文
*文オリジナル
2018-01-02 14:01:131939ブラウズ

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 = クライアント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 を取得する: 匿名プロキシ

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

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

この場合、クライアントの実際の IP は隠されていますが、クライアントがそれらにアクセスするためにプロキシ サーバーを使用していることがアクセス オブジェクトに明らかになります。不正なプロキシ サーバーの数: Distorting Proxies



REMOTE_ADDR = プロキシ サーバー IP

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

この中でこの場合、クライアントがプロキシ サーバーを使用していることも判明しますが、偽のランダム IP (220.4.251.159) を捏造してクライアントの実際の IP を置き換えます

5. 匿名性の高いプロキシ サーバーの PHP を使用して取得します。クライアント IP: 高匿名性プロキシ (エリート プロキシ)

REMOTE_ADDR = プロキシ サーバー IP

HTTP_X_FORWARDED_FOR = 値がないか表示

REMOTE_ADDR であっても HTTP_FORWARDED_FOR であっても、ブラウザーやネットワークが異なるため、これらのヘッダー メッセージは利用できない場合がありますデバイスは異なる IP ヘッダー メッセージを送信する可能性があるため、PHP は $_SERVER["REMOTE_ADDR"] および $_SERVER["HTTP_X_FORWARDED_FOR "] を使用します。 取得された値は null 値または「不明な」値である可能性があります。

関連する推奨事項:

php IPアドレスマスクの計算方法

php IP Get City API (Innocent IP Database)

php IPおよびIPセグメントのアクセス制限コード_PHPチュートリアル

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

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