ホームページ  >  記事  >  バックエンド開発  >  PHP クライアント IP の取得_PHP チュートリアル

PHP クライアント IP の取得_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:49:52819ブラウズ

1

2 // getenv() の使用例

3 $ip = getenv('REMOTE_ADDR');

4 // または単にスーパーグローバル ($_SERVER または $_ENV) を使用します

5 $ip = $_SERVER['REMOTE_ADDR']

6 ?>

これはPHPの公式マニュアルに記載されている方法です。

ただし、Web サーバー API が ASAPI (IIS) の場合、getenv 関数は機能しません。この場合、getenv を使用してユーザーのクライアント IP を取得すると、間違った IP アドレスが取得されます。

したがって、より安全で正確な方法は、getenv 関数の使用をできるだけ避けることです。たとえば、次の関数を使用して IP 情報を取得できます:

01

02 関数 GetIP(){

03 if (getenv("HTTP_CLIENT_IP")

04 && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))

05 $ip = getenv("HTTP_CLIENT_IP");

06 else if (getenv("HTTP_X_FORWARDED_FOR")

07 && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))

08 $ip = getenv("HTTP_X_FORWARDED_FOR");

09 else if (getenv("REMOTE_ADDR")

10

11 $ip = getenv("REMOTE_ADDR");

12 else if (isset($_SERVER['REMOTE_ADDR'])

13

14 && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))

15 $ip = $_SERVER['REMOTE_ADDR']

他16個

17 $ip = "不明";

18 リターン ($ip)

19 }

20

21 $ip = GetIP();

22 エコー $ip

23 ?>

このうち、HTTP_X_FORWARDED_FOR、HTTP_VIA、REMOTE_ADDRの違いは

1. プロキシサーバーを使用しない場合:

REMOTE_ADDR = あなたのIP

HTTP_VIA = 値がないか、www.2cto.com が表示されません

HTTP_X_FORWARDED_FOR = 値がないか、表示されません


2. 透過プロキシサーバーの使用状況: 透過プロキシ

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

HTTP_X_FORWARDED_FOR = 複数のプロキシ サーバーを経由する場合、この値は次のようになります: 203.98.182.163、203.129.72.215。


このタイプのプロキシ サーバーは依然としてあなたの情報を訪問者に転送するため、あなたの本当の身元を隠すという目的を達成することはできません。

3. 通常の匿名プロキシサーバーを使用する状況: 匿名プロキシ

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

HTTP_VIA = プロキシサーバーのIP
HTTP_X_FORWARDED_FOR = プロキシ サーバー IP。複数のプロキシ サーバーを経由する場合、この値は 203.98.182.163、203.98.182.163、203.129.72.215 のようになります。

実際の IP を隠しますが、訪問者にはプロキシ サーバーを使用してアクセスしていることを明らかにします。

4. 欺瞞的なプロキシサーバーの使用: プロキシを歪める

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

HTTP_VIA = プロキシサーバーのIP
HTTP_X_FORWARDED_FOR = ランダム IP。複数のプロキシ サーバーを経由する場合、この値は 203.98.182.163、203.98.182.163、203.129.72.215 のようになります。

訪問者にプロキシ サーバーを使用していることを伝えますが、実際の IP の代わりに偽のランダム IP を作成して騙します。

5. 高匿名性プロキシサーバーの使用状況: 高匿名性プロキシ(エリートプロキシ)

REMOTE_ADDR = プロキシサーバーのIP
HTTP_VIA = 値がないか、表示されません
HTTP_X_FORWARDED_FOR = 値がないか、複数のプロキシ サーバーを経由する場合、この値は 203.98.182.163、203.98.182.163、203.129.72.215 のようになります。

プロキシ サーバーを使用してオブジェクトに直接アクセスしているのと同じように、すべての情報がプロキシ サーバーの情報で完全に置き換えられます。


関数 getip(){
if($_SERVER['HTTP_X_FORWARDED_FOR']){
$online_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif($_SERVER['HTTP_CLIENT_IP']){
$online_ip = $_SERVER['HTTP_CLIENT_IP'];
}その他{
$online_ip = $_SERVER['REMOTE_ADDR'];
}
$online_ip を返します;
}

PPP より抜粋

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478316.html技術記事 1 ?php 2 // getenv() の使用例 3 $ip = getenv(REMOTE_ADDR); 4 // または単にスーパーグローバル ($_SERVER または $_ENV) を使用します 5 $ip = $_SERVER[REMOTE_ADDR];公式 PHP マニュアルでは...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。