Modo più veloce per ottenere valore numerico dell'indirizzo IP della richiesta in ASP.NET

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

  •  28-10-2019
  •  | 
  •  

Domanda

Quale sarebbe il modo più veloce per ottenere il formato numerico ( NON IL FORMATO STRINGA ) del client?

string format  : 223.255.254.0
numeric format : 3758095872

Posso postcomputerlo con un codice come

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

basato sulla stringa Request.UserHostAddress ma speravo che IIS o ASP.NET lo precalcolassero e che fosse nascosto da qualche parte in HttpContext.

Mi sbaglio?

È stato utile?

Soluzione

HttpContext non sembra fare più magia di quello che vedi già: un valore di stringa in HttpRequest.UserHostAddress

Alcune informazioni di base:

HttpContext.Current.Request è di tipo System.Web.HttpRequest che accetta un parametro System.Web.HttpWorkerRequestas quando viene istanziato.

Il HttpWorkerRequest è una classe astratta istanziata ospitando implementazioni come, nel caso di IIS, System.Web.Hosting.IIS7WorkerRequest che poi implementa il metodo astratto GetRemoteAddress() di HttpWorkerRequest che viene utilizzato internamente da HttpRequest.UserHostAddress.

IIS7HttpWorkerRequest sa che REMOTE_ADDR è la proprietà IIS che deve leggere e, dopo aver attraversato alcuni altri livelli di astrazione durante il passaggio del contesto della richiesta, tutto finisce finalmente con la chiamata di MgdGetServerVariableW(IntPtr pHandler, string pszVarName, out IntPtr ppBuffer, out int pcchBufferSize); in webengine.dll che scrive semplicemente una stringa di length pcchBufferSize in ppBuffer contenente le stesse cose che ottieni da HttpRequest.UserHostAddress.

Poiché dubito che ci siano altre parti in HttpContext che ricevono informazioni relative al mittente della richiesta, presumo che dovrai continuare a fare la tua magia per la conversione per la quale ci sono molte idee nel link i pubblicato nei commenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top