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

不言
リリース: 2023-03-30 16:14:01
オリジナル
2874 人が閲覧しました

この記事では、PHP を使用してユーザー クライアントの実際の IP を取得する方法を主に紹介します。これを必要とする友人に共有します。クライアントの 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 つの関数が使用され、値が取得できる場合は、システム環境変数を取得します。値、それ以外の場合は false を返します。

$_SERVER これはサーバーのスーパー グローバル変数配列です。$_SERVER['REMOTE_ADDR'] を使用してクライアントの IP アドレスを取得することもできます。2 つの違いは getenv であることです。 IIS isapi モードでの php の実行はサポートされていません。

strcasecmp(string1 , string2) string 関数の使用法は、string1 と string2 が等しい場合、string1 が string2 より大きい場合に 0 を返します。 0 より大きい場合は、0 より小さい数値が返されます。

関数は最初に顧客の IP を使用します。機能しない場合は、プロキシ メソッドを使用してみてください。機能しません。REMOTE_ADDR を使用してください。

また、IP スプーフィングと複数のプロキシ コードを考慮した、より詳細な IP 検出方法も確認しました。この方法は同様です。 ##1. プロキシ サーバーを使用せずにクライアント IP を取得する PHP:

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 をアクセス オブジェクトに送信するため、真の ID を隠すという目的を達成できません。


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)

この場合、クライアントがプロキシ サーバーを使用しているが、1 つの偽のサーバーを作成していることも明らかになります。ランダムな IP (220.4.251.159) はクライアントの実際の IP を置き換えて欺瞞します。

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 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP でアンチリーチングを実装する方法

PHP は IP 情報を取得し、php は ip を取得します


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

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