Question

Je suis en cours d'exécution d'une application web qui affiche un comportement de débogage si elle est en cours d'exécution au niveau local - entre guillemets chaînes de ressources, etc - et je voudrais faire la démonstration de l'application sur mon ordinateur portable lors d'une conférence où je ne vais pas avoir Internet l'accès, il doit être local.

L'application utilise HttpContext.Current.Request.IsLocal pour déterminer si elle est en cours d'exécution au niveau local - est-il possible de le tromper? Je voudrais duper dans le retour « Faux », même si je suis en effet en cours d'exécution au niveau local.

Je n'ai accès au code source (et réaliser que je pouvais construire une démo où le chèque « IsLocal » est commenté), mais préfère ne pas faire une version spéciale pour cette démo. Si besoin est, je le ferai, mais je préfère utiliser intacte la base de code existant.

Était-ce utile?

La solution

Il faudrait pour cela usurper une adresse IP non locale dans les demandes à votre instance locale de IIS. Je pense que vous auriez probablement passer moins de temps juste faire une version de démonstration que d'essayer de faire ce travail.

Autres conseils

propriété Request.IsLocal implémente le code suivant:

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

Source: code source décompilé (Microsoft: referencesource.microsoft.com )

Hope this helps!

je crois que cela est vrai, mais ne peut pas vérifier en ce moment.

IsLocal retourne Vrai lorsque le site est lié à l'adresse de loopback 127.0.0.1.

Si vous assurez dans IIS que votre site est lié à l'une des adresses non-loopback de votre machine (par exemple 192.168.1.100), puis IsLocal devrait revenir Faux.

Cassini, par définition, est toujours locale, car il ne peut se lier à l'adresse de réalimentation.

Si votre serveur a plusieurs adresses IP, vous aurez besoin d'un code supplémentaire. Ce qui suit traite plusieurs adresses IP, et gère comme CDN CloudFlare qui aura la mauvaise adresse IP dans la propriété Request.UserHostAddress.

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top