11

ローカルで実行されている場合にデバッグ動作を表示する Web アプリケーションを実行しています (リソース文字列の引用など)。インターネットにアクセスできない会議で、ラップトップでアプリケーションのデモを行いたいと考えています。ローカルでなければなりません。

アプリケーションは HttpContext.Current.Request.IsLocal を使用して、ローカルで実行されているかどうかを判断します - それをだます方法はありますか? 実際にローカルで実行しているにもかかわらず、それをだまして「False」を返したいと思います。

私はソース コードにアクセスできます (そして、"IsLocal" チェックがコメント アウトされているビルドのデモを行うことができることに気付きました) が、このデモ用に特別なビルドを作成したくはありません。必要に応じてそうしますが、既存のコードベースをそのまま使用したいと考えています。

4

4 に答える 4

19

Request.IsLocal プロパティは、次のコードを実装します。

public bool IsLocal { 
            get {
                String remoteAddress = UserHostAddress; 

                // if unknown, assume not local
                if (String.IsNullOrEmpty(remoteAddress))
                    return false; 

                // check if localhost 
                if (remoteAddress == "127.0.0.1" || remoteAddress == "::1") 
                    return true;
 
                // compare with local address
                if (remoteAddress == LocalAddress)
                    return true;
 
                return false;
            } 

ソース : 逆コンパイルされたソース コード (Microsoft : referencesource.microsoft.com )

お役に立てれば !

于 2012-03-14T17:21:06.833 に答える
1

これは本当だと思いますが、現時点では確認できません。

サイトがループバック アドレス 127.0.0.1 にバインドされている場合、IsLocal は True を返します。

IIS で、Web サイトがマシンの非ループバック アドレス (つまり、192.168.1.100) のいずれかにバインドされていることを確認した場合、IsLocal は False を返す必要があります。

Cassini は、定義上、ループバック アドレスにのみバインドできるため、常にローカルです。

于 2009-03-25T03:52:09.160 に答える
1

サーバーに複数の IP アドレスがある場合は、追加のコードが必要になります。以下は複数の IP アドレスを処理し、Request.UserHostAddress プロパティに間違った IP アドレスを持つ cloudflare のような CDN を処理します。

コード:

private bool IsLocal()
{
    if (Request.IsLocal)
    {
        return true;
    }
    string forwardIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces())
    {
        IPInterfaceProperties ipProps = netInterface.GetIPProperties();
        foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses)
        {
            string ipString = addr.Address.ToString();
            if (Request.UserHostAddress == ipString || forwardIP == ipString)
            {
                return true;
            }
        }
    }
    return false;
}
于 2015-12-17T04:42:45.637 に答える