Подтвердить что ты не робот

Как получить IP-адрес?

Я хочу получить ip-адрес, который регистрируется на моем сайте. Как это сделать в ASPNET. Я использовал следующий код, но он не получает правильный IP-адрес

string ipaddress = Request.UserHostAddress;
4b9b3361

Ответ 1

Этот метод можно использовать для получения IP-адреса клиентской машины.

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;
}

Ответ 2

В ситуации, когда вы используете IP-адрес для обеспечения безопасности, вы должны знать о своей инфраструктуре.

Если вы используете прокси-сервер между вашим веб-сервером и вашими клиентами, который устанавливает заголовок, вы должны быть в состоянии доверять последнему адресу. Затем вы используете код, например, предложенный Мухаммедом с обновлением, чтобы всегда получать последний IP-адрес из прямого заголовка (см. Код ниже).

Если вы не используете прокси-сервер, будьте осторожны, что заголовок X-Forwarded-For очень легко обмануть. Я предлагаю вам игнорировать это, если у вас нет ясной причины, почему бы и нет.

Я обновил код Мухаммеда Ахтара следующим образом, чтобы вы могли выбрать:

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;
}

Эта статья Wikipedia объясняет риски более тщательно.

Ответ 3

Необходимо использовать HTTP_X_FORWARDED_FOR, но он может возвращать несколько IP-адресов, разделенных запятой. См. эту страницу.

Поэтому вы всегда должны его проверять. Я лично использую функцию Split.

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;
}

Ответ 4

В MVC 6 вы получаете IP-адрес следующим образом:

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

Ответ 5

Если клиент подключается через прозрачный неанонимный прокси, вы можете получить свой адрес:

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]

который может возвращать значение null или "unknown", если IP-адрес не может быть получен таким образом.

Request.ServerVariables["REMOTE_ADDR"] должен быть таким же, как Request.UserHostAddress, любой из которых может быть использован, если запрос не принадлежит не анонимному прокси.

Однако, если запрос поступает из анонимного прокси-сервера, тогда невозможно напрямую получить IP-адрес клиента. Вот почему они называют анонимных прокси.

Ответ 6

В вашем aspx файле убедитесь, что у вас есть допустимые декалярации страницы вверху. По какой-то причине мой был закомментирован.

Каким-то образом это произошло:

<%--<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="cookieTracker.aspx.cs" Inherits="comp466TMA1.cookieTracker" %>--%>

Вместо:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="cookieTracker.aspx.cs"     Inherits="comp466TMA1.cookieTracker" %>

<!DOCTYPE html>


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Cookie Tracker</title>
</head>
<body>
Hey, this is a site tracker using a cookie.
You have visited this site:<%= visits %> times.
Your ip address is <%= incomingIp %>
</body>
</html>

Ответ 7

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"];
    }