Как получить IP-адрес браузера или имя хоста? - PullRequest
1 голос
/ 05 сентября 2008

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

Все пользователи являются анонимными, не прошедшими проверку подлинности, но страница должна отображаться для внутренних пользователей иначе, чем для внешних. В моем коде я использую Request.UserHostName, а затем Dns.GetHostEntry. Затем результат сравнивается с настройкой в ​​моем web.config (который содержит что-то вроде *.mydomain.local). Если сравнение дает положительный результат, то я отображаю HTML-код, который должен видеть внутренний пользователь, в противном случае я отображаю HTML-код, который должен видеть внешний пользователь.

Однако моя проблема в том, что я не всегда получаю ожидаемое значение от Request.UserHostName. на сайте разработки я получаю IP-number (?) машины, на которой запущен браузер, но на сайте клиента я не получаю IP-number машины пользователя, я получаю какую-то другую IP-number. В браузерах не установлены прокси или что-то в этом роде.

Должен ли я использовать что-то еще, кроме Request.UserHostName?

Ответы [ 5 ]

3 голосов
/ 05 сентября 2008

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

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

2 голосов
/ 05 сентября 2008

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

0 голосов
/ 05 сентября 2008

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

Я бы не использовал UserHostName для аутентификации, так как она предоставляется браузером при запросе и может быть легко подделана. IP-адрес был бы намного более эффективным, поскольку трудно подделать IP-адрес в соединении TCP / IP (и поддерживать соединение). Это все еще слабая аутентификация, но может быть достаточной в этом сценарии.

Даже если вы используете IP-адрес, если между клиентом и сервером есть прокси-сервер NAT, вам, возможно, придется признать, что все, что проходит через этот прокси, является доверенным (я предполагаю, что внешние / ненадежные клиенты не проходят через это прокси).

Если это не приемлемо, вы возвращаетесь к другим методам аутентификации. Вместо того, чтобы требовать входа в систему или VPN-подключения, вы можете использовать постоянные cookie-файлы или клиентские сертификаты и передавать их только внутренним клиентам, но вам потребуется какой-то способ их доставки клиенту. Вы, конечно, могли бы доставить постоянный куки-файл, основанный на одноразовом входе в систему. Файлы cookie могут быть подделаны таким же образом, что и имя UserHostName, однако у вас есть лучшая возможность создать значение файла cookie, которое менее вероятно, чем доменное имя.

0 голосов
/ 05 сентября 2008

Похоже, вам возвращают публичный IP-адрес. Заставьте пользователя перейти на http://www.myipaddress.com. Если это совпадает с IP-адресом, возвращаемым вашему программному обеспечению, то это определенно так.

Единственное решение, которое я могу обойти, - это заставить их подключиться к компьютеру, на котором установлено приложение asp.net через VPN, или использовать какой-либо другой вид аутентификации. Последнее, вероятно, лучший вариант.

0 голосов
/ 05 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...