430 Stimmen

Wie bekomme ich die Client-IP-Adresse eines Benutzers in ASP.NET?

Wir haben Request.UserHostAddress, um die IP-Adresse in ASP.NET zu bekommen, aber dies ist normalerweise die IP-Adresse des Internetanbieters des Benutzers, nicht genau die IP-Adresse des Benutzers auf dem Gerät, der zum Beispiel auf einen Link geklickt hat. Wie kann ich die echte IP-Adresse bekommen?

Zum Beispiel steht in einem Stack Overflow-Benutzerprofil: "Letzte Kontoaktivität: Vor 4 Stunden von 86.123.127.8", aber meine Geräte-IP-Adresse ist etwas anders. Wie kommt Stack Overflow an diese Adresse?

In einigen Web-Systemen gibt es eine IP-Adressprüfung für bestimmte Zwecke. Zum Beispiel kann mit einer bestimmten IP-Adresse ein Benutzer alle 24 Stunden nur 5 Klicks auf Download-Links haben. Diese IP-Adresse sollte eindeutig sein, nicht für einen Internetanbieter, der eine große Anzahl von Kunden oder Internetnutzern hat.

Habe ich das richtig verstanden?

4 Stimmen

Sie tun in der Regel dasselbe und funktionieren nicht korrekt für gemeinsam genutzte IP-Adressen. In diesem Bereich kann nicht viel getan werden.

0 Stimmen

Was ist das Problem, das Sie hier lösen möchten, warum glauben Sie, dass Sie die IP-Adresse benötigen?

4 Stimmen

Ich habe eine Anwendung, die spezifische Link-Klicks überprüft, und ein spezifischer Benutzer (nach IP) kann den Link an einem Tag nicht mehr als 5 Mal klicken. Das Problem ist, ob Request.UserHostAddress für eine Gruppe von Benutzern unter einem ISP oder Netzwerk oder für einen bestimmten Benutzer ist.

10voto

GorkemHalulu Punkte 2705
string IP = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;

7voto

Shahid Punkte 71

Was du tun kannst, ist die Router-IP deines Benutzers speichern sowie die weitergeleitete IP und versuchen, es zuverlässig zu machen, indem du beide IPs [Externe öffentliche und interne private] verwendest. Aber auch hier kann es vorkommen, dass dem Client nach einigen Tagen eine neue interne IP vom Router zugewiesen wird, aber es wird zuverlässiger sein.

7voto

Nitesh Punkte 2012

Durch die Kombination der Antworten von @Tony und @mangokun habe ich die folgende Erweiterungsmethode erstellt:

public static class RequestExtensions
{
    public static string GetIPAddress(this HttpRequest Request)
    {
        if (Request.Headers["CF-CONNECTING-IP"] != null) return Request.Headers["CF-CONNECTING-IP"].ToString();

        if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
        {
            string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

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

        return Request.UserHostAddress;
    }
}

1 Stimmen

Warum verwenden Sie HTTP_X_FORWARDED_FOR aber nicht X_FORWARDED_FOR? Sind sie dasselbe?

6voto

VolkanCetinkaya Punkte 547
Öffentliche statische Klasse Dienstprogramm
{
    Öffentliche statische string GetClientIP(diese System.Web.UI.Page Seite)
    {
        Zeichenfolge _ipList = Seite.Request.Headers["CF-CONNECTING-IP"].ToString();
        Wenn (!string.IsNullOrWhiteSpace(_ipList))
        {
            return _ipList.Split(',')[0].Trim();
        }
        Sonst
        {
            _ipList = Seite.Request.ServerVariables["HTTP_X_CLUSTER_CLIENT_IP"];
            Wenn (!string.IsNullOrWhiteSpace(_ipList))
            {
                return _ipList.Split(',')[0].Trim();
            }
            Sonst
            {
                _ipList = Seite.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                Wenn (!string.IsNullOrWhiteSpace(_ipList))
                {
                    return _ipList.Split(',')[0].Trim();
                }
                Sonst
                {
                    return Seite.Request.ServerVariables["REMOTE_ADDR"].ToString().Trim();
                }
            }
        }
    }
}

Verwenden Sie;

string _ip = this.GetClientIP();

4voto

Behnam Mohammadi Punkte 5748

Verwendung in der ashx-Datei

public string getIP(HttpContext c)
{
    string ips = c.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    if (!string.IsNullOrEmpty(ips))
    {
        return ips.Split(',')[0];
    }
    return c.Request.ServerVariables["REMOTE_ADDR"];
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X