Hoe krijg ik een IP-adres?

Ik wil het ip-adres krijgen van degene die zich op mijn site registreert. Hoe u dit doet in ASPNET. Ik heb de volgende code gebruikt, maar deze krijgt niet het juiste IP-adres

string ipaddress = Request.UserHostAddress;

Antwoord 1, autoriteit 100%

U kunt deze methode gebruiken om het IP-adres van de clientcomputer te krijgen.

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

Antwoord 2, autoriteit 58%

In een situatie waarin u het IP-adres voor beveiliging gebruikt, moet u op de hoogte zijn van uw infrastructuur.

Als je een proxy gebruikt tussen je webserver en je clients die de header instelt, moet je het laatste adres kunnen vertrouwen. Dan gebruik je de code zoals Muhammed suggereerde met een update om altijd het laatste IP-adres van de forward header te krijgen (zie onderstaande code)

Als je geen proxy gebruikt, pas dan op dat de X-Forwarded-For-header heel gemakkelijk te vervalsen is. Ik stel voor dat je het dan negeert, tenzij je een duidelijke reden hebt om het niet te doen.

Ik heb de code van Muhammed Akhtar als volgt bijgewerkt zodat je kunt kiezen:

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

Dit Wikipedia-artikellegt de risico’s grondiger uit.


Antwoord 3, autoriteit 48%

HTTP_X_FORWARDED_FOR moet worden gebruikt MAAR het kan meerdere IP-adressen retourneren, gescheiden door een komma. Zie deze pagina.

Dus je moet het altijd controleren. Ik gebruik persoonlijk de Split-functie.

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

Antwoord 4, autoriteit 22%

In MVC 6 haal je het IP-adres op deze manier op:

HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()

Antwoord 5, autoriteit 4%

Als een klant verbinding maakt via een transparante, niet-anonieme proxy, kunt u het adres krijgen van:

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]

die null of “onbekend” kan retourneren als het IP-adres op die manier niet kan worden verkregen.

Request.ServerVariables["REMOTE_ADDR"]moet hetzelfde zijn als Request.UserHostAddress, die beide kunnen worden gebruikt als het verzoek niet afkomstig is van een niet-anoniem proxy.

Als het verzoek echter afkomstig is van een anonieme proxy, is het niet mogelijk om het IP-adres van de client rechtstreeks te verkrijgen. Daarom noemen ze die proxy’s anoniem.


Antwoord 6

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

Other episodes