2

私はこれを読みました:

システムの IP アドレスを取得する方法

しかし、それは私にとって根本的な問題に実際には到達していません。192.168.1.7サーバーが内部の場所からアクセスされているかどうかを知るために、内部ネットワーク上のクライアント IP を取得する必要があります。

少し前に他の誰かによってビルドされたコードを更新しています。このコード スニペットはそこにあります。

$octet = explode(".", getenv("REMOTE_ADDR"), 4);

if($octet[0] != 192 && $octet[1] != 168 && $octet[2] != 1) { 
    die("You are unable to view this page from your current location."); 
}

これはその内部 IP をテストしているように見えますが、同様のコードを含む別のページでdieメッセージが表示されます。そのコードは実際に私の IP がそれ以外のものであることを示しています192.168.1.7(このコードは実際には ISP から与えられた私の静的 IP を示しています):

if($octet[0] != 192 && $octet[1] != 168 && $octet[2] != 1) { 
    die("You are unable to view this page from your current location: " . getenv("REMOTE_ADDR")); 
}

このコードは以前は機能していたように見えましたが、現在は機能していないため、少し混乱しています。いつ機能しなくなったのかは完全にはわかりませんが、私が見ているコードに基づいて、そもそも機能するべきではありませんでした.

ノート

また、このサーバーへのアクセスを必要とするすべてのクライアントは内部 (ほとんど) であることにも言及する必要があります。カスタム ライセンス キー モジュールを備えた CRM です。これらの PHP ページには、ネットワーク上のクライアントだけがアクセスできるようにしたいと考えてい192.168.1.0ます。しかし、難しいのは、次のような場所で DNS を使用して外部から CRM の非キー システム部分にアクセスする方法があることです。

crm.my-domain.com

ネットワークの外部から CRM にアクセスするクライアントは、主要なモジュールにアクセスできません。ネットワーク上のそれらのクライアントのみ192.168.1.0がキーを認識できる必要があります。したがって、内部 IP を取得できれば、それをテストしてページを表示できます。

注 2

私はネットワークで DNS を実行しており、<internal_ip>ポート上にある問題のサーバーへのポートフォワードをルーター上に持っています80

DNS には次のような A レコードがあります。

crm_servername    A    192.168.1.20

そして、CNAMEこれは次のとおりです。

crm    CNAME    crm_servername.my-domain.com

これ以上必要ですか、それともこれでうまくいくのでしょうか? 現在、サブドメインアドレスで問題のサーバーにアクセスできますが、問題のページにアクセスすると、まだ外部 IP が表示されnon-192.168.1.xます...

私の質問は、ローカル ネットワーク上にいて、192.168.1.20 などの IP 上のサーバーにアクセスするときに、ネットワーク内にとどまり、ルーティングされないように DNS ゾーン ファイルを設定する方法です。そしてまた戻ってきますか?私は ISP の静的 IP から出入りしているようで、サーバーはこれを考えています。

4

2 に答える 2

2

このコードを次のように変更すると、おそらくこのコードの動作が改善される可能性があります。

function is_local($ip) {
    $octet = explode('.', $ip);

    return ($octet[0] == '10' ||
        ($octet[0] == '172' && ((int)$octet[1] >=16 && (int)$octet[1] <= 31)) ||
        ($octet[0] == '192' && $octet[1] == '168')
    );
}

このコードは、IP アドレスがプライベート ネットワーク範囲のいずれかに該当するかどうかを確認します。これは、クライアントが内部にあるか、VPN 経由で接続されていることを意味します。

これで問題が解決するか、範囲が広すぎる可能性があります。あなたの IP が ISP からの IP として表示されている場合、ローカル ネットワークに接続していない、または内部ネットワークにポート転送されていると思っているのに、ローカル ネットワークに接続していない可能性があります。サーバ。

于 2012-07-27T22:12:52.297 に答える
1

サーバーにはこの情報を知る方法がないため、サーバー変数からそれを取得することはできません。

唯一の方法は、Web ブラウザーに問い合わせることです (たとえば、Java アプレットを使用して)。ただし、この情報へのアクセスは、せいぜい信頼できません。

見る:

ブラウザでローカルIPアドレスを取得する非サーバー側の方法?

Java アプレットから正しいローカル IP アドレスを取得する

http://www.webdeveloper.com/forum/showthread.php?threadid=242538

于 2012-07-27T22:07:27.673 に答える