Как проверить приложение ASP.NET, которое зависит от IP-адреса - PullRequest
1 голос
/ 28 апреля 2009

Я написал приложение ASP.NET, и в этом приложении я регистрирую IP-адрес запроса. И я также обслуживаю различный контент в соответствии с различным диапазоном IP-адресов.

Мой вопрос заключается в том, что в моей ограниченной тестовой среде у меня есть только 5 машин, у каждой машины есть только 1 IP-адрес, я хочу полностью протестировать работу моего ASP.NET на основе IP-адреса, поэтому в моей ситуации как создать HTTP-запрос, который содержит произвольный IP-адрес, превышающий 5 IP-адресов моих тестовых компьютеров?

Решение в .Net / C # приветствуется. Но любой существующий инструмент также ценится.

РЕДАКТИРОВАТЬ1: Я пишу веб-приложение для школьного образования, которое предоставляет разный контент ученикам из разных городов. В разных городах проводятся разные занятия / семинары / тренинги, и я хочу отобразить наиболее интересное содержание в соответствии с (прокси) адресом филиала школы в конкретном городе.

Ответы [ 8 ]

4 голосов
/ 28 апреля 2009

Один из вариантов - изменить логику для просмотра IP-адреса или заголовка X-Forwarded-For . Этот заголовок часто используется для указания исходного IP-адреса, когда запрос проходит через прокси-сервер. Хотя да, вам не нужно учитывать прокси здесь, но это даст вам очень простой способ проверить вашу логику.

Я думаю, что это будет ваш самый быстрый маршрут, вместо того, чтобы пытаться подделать IP-адреса.

Редактировать

        Uri uriObj = new Uri("http://localhost");
        HttpWebRequest request =
         (HttpWebRequest)WebRequest.CreateDefault(uriObj);

        request.Headers.Add("X-Forwarded-For", "125.125.125.125");

        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        Console.WriteLine(reader.ReadToEnd());

Редактировать

Вам нужно изменить логику на стороне сервера, чтобы она выглядела так:

    string ip = Request.Headers.Get("X-Forwarded-For");
    if (string.IsNullOrEmpty(ip))
    {
        ip = Request.UserHostAddress;
    }

Это в основном говорит, что если заголовок включен, тогда используйте, в противном случае используйте IP-адрес, который они мне сообщают. Таким образом, ваш тестовый код и реальные пользователи будут подобраны.

2 голосов
/ 28 апреля 2009

Здесь на работе мы используем виртуальные машины. Вы можете иметь столько ips, сколько хотите. Они несколько продуктов вокруг. В основном мы используем http://www.virtualbox.org/ (это бесплатно ... LOL).

Просто создайте один, а затем скопируйте / вставьте. Настройте фиксированные ips. И это все; Вы даже можете проверить все на одном физическом компьютере!

Надеюсь, это поможет ...:)

2 голосов
/ 28 апреля 2009

Вы не должны зависеть от IP-адресов. Если один из ваших клиентов находится за прокси-сервером или устройством преобразования сетевых адресов, у них не будет ожидаемого диапазона IP-адресов. Даже если ваша текущая сеть не имеет таких устройств, для вашего приложения не имеет смысла ограничивать способы, которыми сеть может измениться в будущем.

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


РЕДАКТИРОВАТЬ в ответ на редактирование Джорджа.

В вашем сценарии вы должны определенно не зависеть от IP-адресов. Вы хотите зависеть от IP-адреса в качестве замены для географического местоположения. Это просто ленивый дизайн. Тот факт, что IP-адреса имеют косвенное соответствие географическому местоположению, является не чем иным, как артефактом процесса, которому они (в настоящее время) назначены.

Вместо этого, если географическое местоположение имеет значение, тогда ваши клиенты должны сообщить серверу, каково их местоположение! Тогда оно всегда будет точным, даже если сеть изменится.

1 голос
/ 28 апреля 2009

по электронной почте Ой. неправильные вещи

1 голос
/ 28 апреля 2009

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

1 голос
/ 28 апреля 2009

Подмена IP-адресов невозможна (или, по крайней мере, вообще не проста) в Windows из-за ограничений необработанных сокетов ... и т.д.

Вы можете использовать hping под Linux, или WinPcap библиотека для окон для генерации необработанных пакетов, но вы будете тратить много времени впустую.

Полагаю, лучший способ - установить IP-адреса ваших 5 машин вручную на разные IP-адреса (по одному из каждого диапазона, который вы используете).

1 голос
/ 28 апреля 2009

IP исходит из заголовков TCP / IP, а не из "реального" тела HTTP-запроса. Так что подделать нетривиально. Но если вы находитесь в локальной сети, вы можете просто использовать статические IP-адреса для проверки.

0 голосов
/ 28 апреля 2009

Возможно, вы можете проверить свою логику, просто отправив заголовок http "referer". Например:

Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("www.MySite.com")
request.Referer = "http://1.2.3.4"
Dim response As System.Net.HttpWebResponse = request.GetResponse()
...