Moyen le plus rapide d'obtenir une valeur numérique de l'adresse IP de la demande dans ASP.NET

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

  •  28-10-2019
  •  | 
  •  

Question

Quel serait le moyen le plus rapide d'obtenir le format numérique (Pas le format de chaîne) du client?

string format  : 223.255.254.0
numeric format : 3758095872

Je peux post-ordinateur par un code comme

    static public uint IPAddressToLong(string ipAddress)
    {
        var oIP = IPAddress.Parse(ipAddress);
        var byteIP = oIP.GetAddressBytes();


        var ip = (uint)byteIP[0] << 24;
        ip += (uint)byteIP[1] << 16;
        ip += (uint)byteIP[2] << 8;
        ip += byteIP[3];

        return ip;
    }

Sur la base de la chaîne de demande.UserHostAddress, mais j'espérais que IIS ou ASP.NET précomputer cela et il est quelque part caché dans le HTTPContext.

Ai-je tort?

Était-ce utile?

La solution

HttpContext ne semble pas faire plus de magie que ce que vous voyez déjà: une valeur de chaîne en HttpRequest.UserHostAddress

Quelques informations de fond:

HttpContext.Current.Request est de type System.Web.HttpRequest qui prend un System.Web.HttpWorkerRequestcomme paramètre lorsqu'il est instancié.

La HttpWorkerRequest est une classe abstraite instanciée en hébergeant des implémentations comme, dans le cas de l'IIS, System.Web.Hosting.IIS7WorkerRequest qui implémente ensuite la méthode abstraite GetRemoteAddress() de HttpWorkerRequest qui est utilisé en interne par HttpRequest.UserHostAddress.

IIS7HttpWorkerRequest sait que REMOTE_ADDR est la propriété IIS qu'il doit lire et, après avoir traversé quelques couches d'abstraction supplémentaires tout en faisant le tour du contexte de la demande, tout se termine enfin par l'appel MgdGetServerVariableW(IntPtr pHandler, string pszVarName, out IntPtr ppBuffer, out int pcchBufferSize); dans WebEngine.dll qui écrit simplement une chaîne de longueur pcchBufferSize dans ppBuffer contenant les mêmes choses que vous obtenez HttpRequest.UserHostAddress.

Comme je doute qu'il y ait d'autres pièces dans le HTTPContext qui reçoivent des informations liées à la demande de la demande Fed, je suppose que vous devrez continuer à faire votre propre magie pour la conversion pour laquelle il y a beaucoup d'idées dans le lien que j'ai publié dans le commentaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top