Как получить клиентский IP-адрес пользователя в ASP.NET?

Вы можете задать свой .spannerBg :: before a z-index: -1 и .spannerBg a z-index: 1 [ 1110]

Элемент before теперь движется за своими братьями и сестрами.

.spannerBg {
  background-attachment: fixed;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  position: relative;
  background-color: rgba(255, 150, 0, 0.5);
  min-height: 300px;
  z-index: 1;
}

.spannerBg::before {
  content: "";
  display: block !important;
  background-color: inherit;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: -1;
}

p {
  font-size: x-large;
}
<div class="spannerBg" style="
    color: #fff;
    background-color: rgba(0, 0, 0, 0.5);
    background-image:url(https://images.pexels.com/photos/1051075/pexels-photo-1051075.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260)">

  <p>Somecontent</p>

</div>
<div>
  beiwrfa<br>ewnifiebfia<br>fbjwqbfwebfj<br>
</div>
<div class="spannerBg" style="
    background-image:url(https://images.pexels.com/photos/865711/pexels-photo-865711.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260)">
  <p>Somecontent</p>
</div>

<div>
  <p>somecontent</p>
</div>

373
задан Peter Mortensen 30 April 2011 в 22:52
поделиться

4 ответа

Как говорили другие, вы не можете делать то, что просите. Если вы опишите проблему, которую пытаетесь решить, может, кто-то может помочь? Например, вы пытаетесь однозначно идентифицировать своих пользователей? Не могли бы вы использовать куки-файл или идентификатор сеанса, возможно, вместо IP-адреса?

Редактировать Адрес, который вы видите на сервере, не должен быть адресом интернет-провайдера, поскольку вы говорите, что это будет огромный диапазон. Адрес домашнего пользователя в широкополосной сети будет адресом их маршрутизатора, поэтому каждое устройство в доме будет выглядеть одинаково снаружи, но маршрутизатор использует NAT для обеспечения правильной маршрутизации трафика на каждое устройство. Для пользователей, получающих доступ из офисной среды, адрес может быть одинаковым для всех пользователей. Сайты, использующие IP-адрес для идентификации, рискуют ошибиться - приведенные вами примеры являются хорошими, и они часто терпят неудачу. Например, мой офис находится в Великобритании, точка прорыва (где я «появляюсь» в Интернете) находится в другой стране, где находится наше основное ИТ-подразделение, поэтому из моего офиса мой IP-адрес находится не в Великобритании. По этой причине я не могу получить доступ только к британскому веб-контенту, такому как BBC iPlayer). В любой момент времени в моей компании находились сотни или даже тысячи людей, которые, по-видимому, обращаются к Интернету с одного и того же IP-адреса.

Когда вы пишете код сервера, вы никогда не можете быть уверены, какой IP-адрес вы используете. см. имеет в виду. Некоторым пользователям это нравится. Некоторые люди намеренно используют прокси или VPN, чтобы еще больше вас запутать.

Когда вы говорите, что ваш машинный адрес отличается от IP-адреса, указанного в StackOverflow, как вы узнаете свой машинный адрес? Если вы просто просматриваете локально, используя ipconfig или что-то в этом роде, я ожидаю, что он будет другим по причинам, которые я изложил выше. Если вы хотите перепроверить, что думает внешний мир, взгляните на whatismyipaddress.com/ .

Эта ссылка на Википедию в NAT предоставит вам некоторые сведения об этом.

137
ответ дан 23 November 2019 в 00:01
поделиться

Часто вам нужно знать IP-адрес кто-то посещает ваш сайт. Хотя в ASP.NET есть несколько способов сделать это, один из лучших способов, которые мы видели, это использование «HTTP_X_FORWARDED_FOR» из коллекции ServerVariables.

Вот почему ...

Иногда ваши посетители находятся за прокси-сервером. сервер или маршрутизатор и стандартный запрос Request.UserHostAddress захватывает только IP-адрес прокси-сервера или маршрутизатора. В этом случае IP-адрес пользователя сохраняется в переменной сервера («HTTP_X_FORWARDED_FOR»).

Итак, сначала мы хотим проверить «HTTP_X_FORWARDED_FOR» и если он пуст, мы просто возвращаем ServerVariables ("REMOTE_ADDR") .

Хотя этот метод не является надежным, он может привести к лучшим результатам. Ниже приведен код ASP.NET в VB.NET, взятый из сообщения в блоге Джеймса Кроули «Получено: HTTP_X_FORWARDED_FOR возвращает несколько IP-адресов»

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
431
ответ дан 23 November 2019 в 00:01
поделиться

Что еще вы считаете IP-адресом пользователя? Если вам нужен IP-адрес сетевого адаптера, я боюсь, что в веб-приложении это невозможно. Если ваш пользователь находится за NAT или другим материалом, вы также не можете получить IP-адрес.

Обновление : Хотя существуют веб-сайты, которые используют IP для ограничения пользователя (например, rapidshare), они не работают правильно в средах NAT.

23
ответ дан 23 November 2019 в 00:01
поделиться

IP-адреса являются частью сетевого уровня в «семиуровневом». стек». Сетевой уровень может делать все, что хочет с IP-адресом. Вот что происходит с прокси-сервером, NAT, ретранслятором и т. Д.

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

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

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

13
ответ дан 23 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: