Pergunta

Estou executando uma aplicação web que exibe um comportamento de depuração se ele está sendo executado localmente - entre aspas seqüências de recursos, etc - e eu gostaria de demonstrar a aplicação no meu laptop em uma conferência em que eu não vou ter internet acesso, por isso tem que ser local.

Os usos de aplicação HttpContext.Current.Request.IsLocal para determinar se ele está sendo executado localmente - existe alguma maneira de enganá-lo? Eu gostaria de enganá-lo a voltar "False" mesmo que eu estou de fato executado localmente.

Eu não têm acesso ao código fonte (e perceber Eu só poderia demonstrar uma compilação onde o cheque "IsLocal" é comentada), mas prefere não fazer uma compilação especial para esta demonstração. Se for necessário, eu vou fazer isso, mas eu prefiro usar o existente codebase intocado.

Foi útil?

Solução

Isso exigiria spoofing um endereço IP não-local em pedidos para sua instância local do IIS. Eu acho que você provavelmente gastar menos tempo apenas fazendo uma compilação de demonstração do que tentar fazer esse trabalho.

Outras dicas

implementos propriedade Request.IsLocal o seguinte código:

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: código-fonte compilado (Microsoft: referencesource.microsoft.com )

Espero que isso ajude!

Eu acredito que isso é verdade, mas não é possível verificar no momento.

IsLocal retorna True quando o site está vinculado ao endereço de auto-retorno 127.0.0.1.

Se você se certificar no IIS que seu site está vinculado a um dos endereços não-loopback da máquina (ou seja, 192.168.1.100), então IsLocal deve retornar False.

Cassini, por definição, é sempre local, uma vez que só pode ligar para o endereço de auto-retorno.

Se o servidor tiver vários endereços IP, você vai precisar de algum código extra. Os seguintes alças vários endereços IP, e alças CDN como cloudflare que terá o endereço IP errado na propriedade Request.UserHostAddress.

Código:

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top