2

質問は知っていますが、stackoverflow で本当の答えが見つかりませんでした。これはX_FORWARDED_FOR,SERVER_NAMEまたはSERVER_REMOTE_ADDR, サーバーに接続されているリモート クライアントのローカル IP アドレスを取得して、実際にローカル リモート ネットワークに接続されているユーザーを検出したい.

これを説明してください:

ISP  <---->  ROUTER <----> LOCAL NETWORK <----> LOCAL PC

私が知りたいことは何ですか?

  1. 接続されたリモート クライアントのパブリック IP アドレス$_SERVER["REMOTE_ADDR"]、わかりましたが!...
  2. パブリック ネットワーク上の接続されたクライアントのローカル IP アドレス (192.168.xx、10.xxx、172.xxx)

この問題を解決するには?答えがあるので、ローカルIPアドレスを知りたい場合は、これは誰にとっても知っておくべきだと思います:

CURL使用して機能する必要がありcurl_getinfo()ます。次に、必要な URL アドレス (メイン サーバーの IP など) を指定します。次に例を示します。

<?php
    $ch = curl_init();

    $opt = curl_setopt($ch, CURLOPT_URL, "YOUR_SOME_URL_ADDRESS"); 

    curl_exec($ch);

    $response = curl_getinfo($ch);

    $result = array('client_public_address' => $response["primary_ip"],
                    'client_local_address' => $response["local_ip"]
            );

    var_dump($result);

    curl_close($ch);

?>

どの$response["primary_ip"]応答があなたの公開アドレスで、$response["local_ip"]どの応答がローカル アドレスであるかに注目してください。これは例です:

ISP  <---->  ROUTER <----> LOCAL NETWORK <----> LOCAL PC
 /\                                              /\
 ||                                              ||
 \/                                              \/
$response["primary_ip"]                  <----> $response["local_ip"]
213.x.x.x  (for example)                        192.168.1.3 (for example)

結果:

array (size=2)
  'client_public_address' => string '213.xxx.xxx.xxx' (length=14)
  'client_local_address'  => string '192.168.1.3' (length=11)

これは、実際のローカル IP アドレスを与えるものではありません!

ありがとうございました。

4

4 に答える 4

1

デフォルトでは、アドレス指定されたローカル IP はアプリケーション層に公開されません。ネットワーク パケットからこの情報を抽出できる低レベルのツールが必要です。

于 2013-02-23T19:26:38.040 に答える
1

これは決して機能しません。
まず、クライアントを CURL に応答させるには、クライアントに HTTP サーバーが必要です。
たとえそうであっても、「ローカル IP」を返すことは保証されていません。次に、クライアントに ping を返す HTTP サーバーは疑わしいと思われ、おそらく禁止されます。

とにかく、私はあなたのコードをリモート IP で試しました:

array(2) {
  ["client_public_address"]=>
  string(7) "8.8.8.8"
  ["client_local_address"]=>
  string(0) ""
}

それは何も返さなかった

ローカルルーターを試したところ、問題なく動作しました

array(2) {
  ["client_public_address"]=>
  string(13) "XXX"
  ["client_local_address"]=>
  string(12) "192.168.1.37"
}

これは自分のローカル ルーターに対してのみ機能しますが、リモート システムからローカル アドレスを取得することはできません。
率直に言って、PC に割り当てられたローカル IP アドレスだけが表示されます。

于 2013-02-23T19:23:27.157 に答える
0

範囲 (xxx.xxx.xxx.xxx/24) を決定するために HTML5 機能 (CORS および WebSocket) を使用できます。このライブの例を参照してください。

JS-RECON

その仕組みは?IP アドレスの範囲 (192.168.1.0/24、192.168.0.1/24 など) をスキャンして、ユーザーが使用した範囲を見つけることができますが、正確な IP アドレスを見つけることは依然として困難です。

結果: 機能しません。IP は 192.168.1.200 で、192.168.1.2 を返します。サイトが無効です。ツールは実際には機能しません。

于 2013-02-23T19:46:01.843 に答える
-3
    function getRealIpAddr(){ 
        //check ip from share internet 
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) { 
            $ip=$_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
         //to check ip is pass from proxy 
            $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
        } else { 
            $ip=$_SERVER['REMOTE_ADDR']; 
        }

       return $ip; 
    }
于 2013-07-31T11:44:54.080 に答える