Comment puis-je obtenir l'adresse IP actuelle des visiteurs?Obtenir l'adresse IP de l'utilisateur
Répondre
HttpContext.Current.Request.UserHostAddress;
ou
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
ou
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
Request.UserHostAddress
Edit: a également trouvé une question intéressante concernant les en-têtes http IP-connexes here. Comme mentionné dans les commentaires et dans le lien ci-dessus, HTTP_X_FORWARDED_FOR
peut contenir plusieurs adresses IP séparées par une virgule. Je n'ai pas fait face à cette situation, mais supposons que certaines corrections soient nécessaires.
J'utiliser ce code pour obtenir l'adresse IP (il renvoie la valeur IPAddress.None
si jamais on obtient échoué pour une raison):
/// <summary>
/// Gets the IP address of the request.
/// <remarks>
/// This method is more useful than built in because in some cases it may show real user IP address even under proxy.
/// <summary>
/// Gets the IP address of the request.
/// <remarks>
/// This method is more useful than built in because in some cases it may show real user IP address even under proxy.
/// The <see cref="System.Net.IPAddress.None" /> value will be returned if getting is failed.
/// </remarks>
/// </summary>
/// <param name="request">The HTTP request object.</param>
/// <returns></returns>
public static IPAddress GetIp(this HttpRequest request)
{
string ipString;
if (string.IsNullOrEmpty(request.ServerVariables["HTTP_X_FORWARDED_FOR"]))
{
ipString = request.ServerVariables["REMOTE_ADDR"];
}
else
{
ipString = request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.FirstOrDefault();
}
IPAddress result;
if (!IPAddress.TryParse(ipString, out result))
{
result = IPAddress.None;
}
return result;
}
+1 pour renvoyer en tant qu'objet IPAddress –
Sachez que l'en-tête 'X-Forwarded-For' peut être falsifié, ne prenez donc aucune décision de sécurité en fonction de ce dernier. Vérifiez uniquement la valeur 'HTTP_X_FORWARDED_FOR' si la machine se trouve derrière un équilibreur de charge ou un proxy inverse. – devstuff
Sachez également que HTTP_X_FORWARDED_FOR contiendra plusieurs adresses IP si plusieurs proxys sont transmis. Est-ce que la méthode Parse gère cela correctement? – Tomas
public String GetIP()
{
string ipString;
if (string.IsNullOrEmpty(Request.ServerVariables["HTTP_X_FORWARDED_FOR"]))
{
ipString = Request.ServerVariables["REMOTE_ADDR"];
}
else
{
ipString = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
}
return ipString;
}
d'abord essayer de trouver proxy IP, si son null nous pouvons obtenir que la propriété intellectuelle du système
Essayez ceci pour obtenir l'adresse IP externe de l'utilisateur ..
public static string getExternalIp()
{
try
{
string externalIP;
externalIP = (new WebClient()).DownloadString("http://checkip.dyndns.org/");
externalIP = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"))
.Matches(externalIP)[0].ToString();
return externalIP;
}
catch { return null; }
}
Quel est le différent entre les deux premières alternatives? –