Frage

Ich bin mit einer Web-Anwendung, die einige Debug-Verhalten zeigt, wenn es lokal laufen gelassen wird - Anführungszeichen um Ressourcen-Strings, usw. - und ich möchte die Anwendung auf meinem Laptop auf einer Konferenz zur Demo, wo ich kein Internet haben Zugang, so hat es lokal sein.

Die Anwendung verwendet HttpContext.Current.Request.IsLocal um festzustellen, ob es lokal ausgeführt - ist es eine Möglichkeit, es zu täuschen? Ich würde es gerne in Trick „False“ zurückkehrt, obwohl ich in der Tat vor Ort leite.

habe ich Zugriff auf den Quellcode (und wird mir klar, nur ein Build-Demo könnte, wo die „IsLocal“ wird überprüft, kommentiert out), sondern lieber keine spezielle Build für diese Demo machen. Wenn nötig, werde ich tun, aber ich würde lieber die bestehende Codebasis unberührt verwenden.

War es hilfreich?

Lösung

Das würde eine nicht-lokale IP-Adresse in Anfragen an Ihrer lokale Instanz von IIS-Spoofing. Ich glaube, Sie wahrscheinlich weniger Zeit damit verbringen würden nur eine Demo-Build zu machen, als zu versuchen, diese Arbeit zu machen.

Andere Tipps

Request.IsLocal Eigenschaft implementiert den folgenden Code:

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

Quelle: dekompilierten Quellcode (Microsoft: referencesource.microsoft.com )

Hope, das hilft!

Ich glaube, das ist wahr, aber kann jetzt nicht überprüfen.

IsLocal gibt True zurück, wenn die Seite mit der Loopback-Adresse 127.0.0.1 gebunden ist.

Wenn Sie in IIS sicherstellen, dass Ihre Website nicht-Loopback-Adressen der an einem Ihrer Maschine (das heißt 192.168.1.100) gebunden ist, dann sollte IsLocal Falsch zurück.

Cassini, per Definition, ist immer lokal, da sie nur auf die Loopback-Adresse binden können.

Wenn der Server mehrere IP-Adressen hat, werden Sie einige zusätzliche Code benötigen. Die folgende verarbeitet mehr IP-Adressen und Griffe CDN wie cloudflare, die die falsche IP-Adresse in der Request.UserHostAddress Eigenschaft haben.

Code:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top