Mevcut ziyaretçilerin IP adresini nasıl alabilirim?Kullanıcının IP Adresini Alın
cevap
HttpContext.Current.Request.UserHostAddress;
veya
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
veya
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
Request.UserHostAddress
Düzeltme: IP ile ilgili http header here ile ilgili ilginç bir soru da buldu.
Edit2: Yukarıdaki yorumlarda da belirtildiği gibi, HTTP_X_FORWARDED_FOR
üstbilgisinde virgülle ayrılmış birden çok IP adresi bulunabilir. Bu durumla karşılaşmadım ama cevabım için bazı düzeltmelerin gerekli olduğunu varsayalım.
Ben IP adresini almak için bu kodu kullanın (nedense başarısız oluyor eğer IPAddress.None
değer döndürür): onun boş alabileceğimiz eğer
/// <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 IPAddress nesnesi olarak döndürme için –
'X-Forwarded-For' başlığının taklit edilebileceğini unutmayın, bu nedenle buna dayanarak herhangi bir güvenlik kararı almayın. Makine bir yük dengeleyicisinin veya ters proxy'nin arkasındaysa, sadece 'HTTP_X_FORWARDED_FOR' değerini kontrol edin. – devstuff
Ayrıca, birden fazla proxy geçilirse, HTTP_X_FORWARDED_FOR'un birden fazla IP adresi içereceğini unutmayın. Parse yöntemi bunu doğru şekilde halleder mi? – 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;
}
Birincisi, vekil IP bulmaya çalışıyor Bu sistem IP
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; }
}
farklılık nedir .. Bu kullanıcının dış ip adresini almak için deneyin İlk iki alternatif arasında ence? –