Comment obtenir une adresse IP?

Je veux obtenir l’adresse IP de la personne qui s’inscrit sur mon site. Comment faire cela dans ASPNET. J’ai utilisé le code suivant, mais il ne reçoit pas l’adresse IP correcte

ssortingng ipaddress = Request.UserHostAddress; 

Vous pouvez utiliser cette méthode pour obtenir l’adresse IP de l’ordinateur client.

 public static Ssortingng GetIP() { Ssortingng ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (ssortingng.IsNullOrEmpty(ip)) { ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } return ip; } 

Dans une situation où vous utilisez l’adresse IP pour la sécurité, vous devez connaître votre infrastructure.

Si vous utilisez un proxy entre votre serveur Web et vos clients qui définit l’en-tête, vous devriez pouvoir faire confiance à la dernière adresse. Ensuite, vous utilisez le code comme Muhammed suggéré avec une mise à jour pour toujours obtenir la dernière adresse IP de l’en-tête avant (voir le code ci-dessous)

Si vous n’utilisez pas de proxy, sachez que l’en-tête X-Forwarded-For est très facile à usurper. Je vous suggère de l’ignorer à moins que vous n’ayez une raison claire de ne pas le faire.

J’ai mis à jour le code de Muhammed Akhtar comme suit pour vous permettre de choisir:

 public ssortingng GetIP(bool CheckForward = false) { ssortingng ip = null; if (CheckForward) { ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; } if (ssortingng.IsNullOrEmpty(ip)) { ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } else { // Using X-Forwarded-For last address ip = ip.Split(',') .Last() .Trim(); } return ip; } 

Cet article de Wikipedia explique les risques de manière plus approfondie.

HTTP_X_FORWARDED_FOR doit être utilisé MAIS il peut renvoyer plusieurs adresses IP séparées par une virgule. Voir cette page

Donc, vous devriez toujours le vérifier. J’utilise personnellement la fonction Split.

 public static Ssortingng GetIPAddress() { Ssortingng ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (ssortingng.IsNullOrEmpty(ip)) ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; else ip = ip.Split(',')[0]; return ip; } 

Dans MVC 6, vous récupérez l’adresse IP de cette manière:

 HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToSsortingng() 

Si un client se connecte via un proxy non anonyme transparent, vous pouvez obtenir son adresse depuis:

 Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 

qui peut retourner null ou “inconnu” si l’adresse IP ne peut pas être obtenue de cette façon.

Request.ServerVariables["REMOTE_ADDR"] doit être identique à Request.UserHostAddress , qui peut être utilisé si la demande ne provient pas d’un proxy non anonyme.

Toutefois, si la demande provient d’un proxy anonyme, il n’est pas possible d’obtenir directement l’adresse IP du client. C’est pourquoi ils appellent ces mandataires anonymes .

 ssortingng result = ssortingng.Empty; ssortingng ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!ssortingng.IsNullOrEmpty(ip)) { ssortingng[] ipRange = ip.Split(','); int le = ipRange.Length - 1; result = ipRange[0]; } else { result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; }