Ciao!
Quando il tuo browser richiede una pagina web ad un SEVRVER, invia anche alcune intestazioni, ad esempio: tipo di browser, la o le lingue supportate, ed anche il proprio indirizzo IP.
Nel caso degli IP, sono disponibili due "server variables" piuttosto interessanti: REMOTE_ADDR e HTTP_X_FORWARDED_FOR che rilevano l'indirizzo IP del visitatore. Purtroppo alcuni Client accedono attraverso "terze parti" (per es. un proxy), ragion per cui la variabile del server REMOTE_ADDR non conterrà più il loro indirizzo IP, che sarà contenuta invece in HTTP_X_FORWARDED_FOR e che rappresenta ad esempio l'IP del Proxy server utilizzato oppure, l'IP del firewall a monte della DMZ di una rete locale. Se, ci troviamo in presenza di uno di questi casi quindi, la richiesta diretta di REMOTE_ADDR genererebbe un errore 500 della pagina (errore interno del SERVER). Viene quindi in nostro soccorso HTTP_X_FORWARDED_FOR che contiene l'IP "fittizio" dell'utente. Quindi, per prima cosa, controlleremo il contenuto della variabile HTTP_X_FORWARDED_FOR, poi, se vuoto, controlleremo REMOTE_ADDR. Vediamo come:
string clientIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (String.IsNullOrEmpty(clientIP))
clientIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
Antonio