私はHttpRequest.Current.Request.IsLocalをだますことはできますか?

StackOverflow https://stackoverflow.com/questions/680079

  •  22-08-2019
  •  | 
  •  

質問

リソース文字列の前後に引用符など - -

私はそれがローカルで実行されていた場合、いくつかのデバッグ動作を表示するWebアプリケーションを実行していると私は私がインターネットを持っていません会議で私のラップトップ上のアプリケーションのデモをしたいのですがアクセスは、それをローカルにする必要があります。

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

私は、ソースコードへのアクセス権を持っている(と私はちょうど「のisLocal」のチェックがコメントアウトされたビルドをデモ可能性が実現する)のではなく、このデモのために特別なビルドをすることはないだろうか。必要であれば、私はそれを行うだろうが、私はむしろ、手つかずの既存のコードベースを使用すると思います。

役に立ちましたか?

解決

これはIISのローカル・インスタンスへのリクエストで非ローカルIPアドレスを偽装必要となります。私はあなたがおそらくその仕事をしようとしてよりも、デモのビルドを作るより少ない時間を費やすと思う。

他のヒント

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;
            } 

出典:逆コンパイル、ソースコード(マイクロソフト: referencesource.microsoft.com の)

この情報がお役に立てば幸い!

の私はこれが真実であると信じていますが、今は確認することはできません。

サイトは、ループバックアドレス127.0.0.1にバインドされたときに

のisLocalはTrueを返します。

あなたのウェブサイトがあなたのマシンの非ループバックアドレス(すなわち、192.168.1.100)のいずれかにバインドされていることをIISに確認してください場合は、

、その後のisLocalはFalseを返す必要があります。

それが唯一のループバックアドレスにバインドすることができますので、

カッシーニは、定義により、常にローカルです。

サーバが複数の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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top