SORU
9 NİSAN 2009, PERŞEMBE


Nasıl bir kullanıcı'ASP.NET istemci IP adresi almak için?

Request.UserHostAddress ASP.NET ama bu genellikle kullanıcının ISP, IP Adresi, IP adresi almak için, tam olarak değil örneğin bir linke tıklayan kullanıcı makine IP adresi var. Nasıl gerçek IP Adresini alabilir miyim?

Yığın Taşması bir kullanıcı profilinde örneğin,:"Son hesap etkinliği: 4 saat 86.123.127.8" . önce ama biraz farklı IP makinem. Nasıl Taşması bu adresi almak Yığını mı?

Bazı web sistemlerde IP adresi bazı amaçlar için kontrol edin. Örneğin, belirli bir IP adresi, her 24 saat için, Kullanıcı sadece indirme bağlantıları sadece 5 tıklama olabilir? Bu IP adresi, benzersiz, müşteri ya da İnternet kullanıcılarının büyük bir yelpazesi olan bir ISP için olmalıdır.

İyi anlamış mıyım?

CEVAP
11 NİSAN 2009, CUMARTESİ


Genellikle birisi web sitenizi ziyaret IP adresini bilmek isteyecektir. ASP.NET bunu yapmak için çeşitli yollar varken, bugüne kadarki en iyi yollarından biri "HTTP_X_FORWARDED_FOR" ServerVariables koleksiyonu. kullanarak.

Neden burada

Bazen ziyaretçi ya da bir proxy sunucusu veya bir yönlendirici ve Request.UserHostAddress standart tek yakalar proxy sunucusunun IP adresini veya yönlendirici arkasında. Bu IP adresi daha sonra sunucu değişkeni içinde saklanır durumda ("") HTTP_X_FORWARDED_FOR.

Ne yapmak istediğimiz ilk kontrol "ve eğer varsa" o zaman sadece ServerVariables("REMOTE_ADDR") boş dönmek. HTTP_X_FORWARDED_FOR yani

Bu yöntem, kusursuz olmasa da, daha iyi sonuçlara yol açabilir. Aşağıda VB.NET, James Crowley's blog post "Gotcha: HTTP_X_FORWARDED_FOR returns multiple IP addresses" alınan ASP.NET kod

C#

protected string GetIPAddress()
{
    System.Web.HttpContext context = System.Web.HttpContext.Current; 
    string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (!string.IsNullOrEmpty(ipAddress))
    {
        string[] addresses = ipAddress.Split(',');
        if (addresses.Length != 0)
        {
            return addresses[0];
        }
    }

    return context.Request.ServerVariables["REMOTE_ADDR"];
}

VB.NET

Public Shared Function GetIPAddress() As String
    Dim context As System.Web.HttpContext = System.Web.HttpContext.Current
    Dim sIPAddress As String = context.Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    If String.IsNullOrEmpty(sIPAddress) Then
        Return context.Request.ServerVariables("REMOTE_ADDR")
    Else
        Dim ipArray As String() = sIPAddress.Split(New [Char]() {","c})
        Return ipArray(0)
    End If
End Function

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Break

    Break

    10 Aralık 2005
  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007