Domanda

Sono in esecuzione un'applicazione web che consente di visualizzare un comportamento di debug se è in esecuzione in locale - virgolette intorno stringhe di risorse, ecc - e mi piacerebbe demo l'applicazione sul mio portatile in una conferenza in cui non avrò internet l'accesso, quindi deve essere locale.

L'applicazione utilizza HttpContext.Current.Request.IsLocal per determinare se è in esecuzione in locale - esiste un modo per ingannare esso? Mi piacerebbe ingannare in ritorno "False" anche se sto davvero facendo funzionare a livello locale.

Io ho accesso al codice sorgente (e mi rendo conto ho potuto solo demo una generazione in cui è commentato il controllo "IsLocal"), ma preferirei non fare una build speciale per questa demo. Se necessario, lo farò, ma io preferisco usare la base di codice esistente intatta.

È stato utile?

Soluzione

Ciò richiederebbe lo spoofing di un indirizzo IP non locale nelle richieste per l'istanza locale di IIS. Penso che probabilmente si sarebbe trascorrere meno tempo solo facendo un accumulo demo che cercare di fare quel lavoro.

Altri suggerimenti

proprietà Request.IsLocal implementa il seguente codice:

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

Fonte: decompilato il codice sorgente (Microsoft: referencesource.microsoft.com )

Spero che questo aiuti!

Credo che questo è vero, ma non è possibile verificare al momento.

IsLocal restituisce True quando il sito è associato all'indirizzo di loopback 127.0.0.1.

Se assicurarsi in IIS che il vostro sito è destinato a uno degli indirizzi non loopback della vostra macchina (cioè 192.168.1.100), quindi IsLocal deve restituire False.

Cassini, per definizione, è sempre locale, dal momento che può legarsi soltanto all'indirizzo di loopback.

Se il server ha più indirizzi IP, avrete bisogno di un po 'di codice aggiuntivo. gestisce Di seguito più indirizzi IP e gestisce CDN come cloudflare che avrà l'indirizzo IP errato nella proprietà Request.UserHostAddress.

Codice:

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top