このコードでローカル IP を取得しています
if (getenv('HTTP_X_FORWARDED_FOR'))
$ip=getenv('HTTP_X_FORWARDED_FOR');
else
$ip=getenv('REMOTE_ADDR');
クライアントのデフォルト ゲートウェイ IP を取得していますが、クライアントのライブ IP が必要です。
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()
は、これらの基本的なネットワークの基本を変更することはできません。
最初のコメントは正しいですが、一部のプロキシ クライアントの IP は HTTP_X_FORWARDED_FOR で利用できますが、それはあなたの場合ではないようです。
他の環境変数 (phpinfo() または print_r($_SERVER)) を監視して、クライアント IP が使用可能かどうかを確認します。
そうでない場合、これは不可能です。プロキシは実際の IP を隠しています (そうあるべきです)。