0

このコードでローカル IP を取得しています

if (getenv('HTTP_X_FORWARDED_FOR')) 

    $ip=getenv('HTTP_X_FORWARDED_FOR');
else

    $ip=getenv('REMOTE_ADDR');

クライアントのデフォルト ゲートウェイ IP を取得していますが、クライアントのライブ IP が必要です。

4

2 に答える 2

1

PHPのgetenv(REMOTE_ADDR) は、クライアントの可視ネットワーク アドレスを提供します

 REMOTE_ADDR  = hostnumber
 hostnumber   = ipv4-address | ipv6-address
 ipv4-address = 1*3digit "." 1*3digit "." 1*3digit "." 1*3digit
 ipv6-address = hexpart [ ":" ipv4-address ]
 hexpart      = hexseq | ( [ hexseq ] "::" [ hexseq ] )
 hexseq       = 1*4hex *( ":" 1*4hex )

ただし、示されているように、サーバーは実際に認識できる IP アドレスしか取得できません。クライアントがゲートウェイ (NAT を使用した pe) の背後に隠れている場合は、NAT アドレスのみが表示されます。PHPgetenv()は、これらの基本的なネットワークの基本を変更することはできません。

于 2013-07-15T11:26:36.230 に答える
1

最初のコメントは正しいですが、一部のプロキシ クライアントの IP は HTTP_X_FORWARDED_FOR で利用できますが、それはあなたの場合ではないようです。

他の環境変数 (phpinfo() または print_r($_SERVER)) を監視して、クライアント IP が使用可能かどうかを確認します。

そうでない場合、これは不可能です。プロキシは実際の IP を隠しています (そうあるべきです)。

于 2013-07-15T11:26:44.473 に答える