Получить локальный IP-адрес в разделе Application_OnStart of global.asa?

#asp-classic

#asp-classic

Вопрос:

Хотя кажется, что об этом спрашивали много раз раньше, но здесь есть неприятный поворот…

Во-первых, я работаю над настольным приложением, которое вызывает веб-страницу в той же локальной системе. Затем это веб-приложение обращается ко второму серверу (в локальной сети) и должно передать свой собственный IP-адрес другому серверу. Конечно, просто: Request.ServerVariables("LOCAL_ADDR") и я закончил…

В этом случае это не сработает… Код для локального веб-приложения написан на классическом ASP, и почти каждый исходный файл зашифрован, поэтому я не могу изменить его код. Все, что я могу исправить, это файл global.asa. В событии Application_OnStart глобального.asa есть строка Application("InternalIp") = "172.22.14.59" и действительно, это локальный IP-адрес, жестко заданный… И этот параметр приложения используется в остальной части кода для ссылки на IP-адрес.

Однако мой IP-адрес в нашей локальной сети имеет тенденцию меняться каждый день, поэтому каждый день мне нужно изменять global.asa, чтобы он содержал мой новый IP-адрес. Я мог бы написать небольшое приложение, которое будет изменять global.asa для меня каждый день при запуске, но я бы предпочел решение, в котором global.asa был бы достаточно умен, чтобы сам определять этот IP-адрес!
К сожалению, IP-адрес должен быть известен при запуске приложения, а не в начале сеанса, иначе я мог бы использовать Application("InternalIp") = Request.ServerVariables("LOCAL_ADDR") событие Session_OnStart. Попробовал это, приложение разбилось, поэтому оно не будет работать.
Но эта строка кода в Application_OnStart не будет работать, поскольку запрос неизвестен в этот момент, таким образом, это тоже приведет к сбою. (Пробовал, не сработало …)

Итак, мое ограничение заключается в том, что мне нужно получить IP-адрес в событии Application_OnStart глобального.asa надежным способом. И нет, использование DNS-имен тоже не работает. (Тоже пробовал, не сработало.) Какие варианты у меня есть?

Ответ №1:

вы могли бы использовать командную строку (wscript.shell) и ipconfig?

или введите свой ip-адрес в текстовый файл (с помощью другого инструмента), а затем зачитайте этот текстовый файл

вы также можете добавить страницу asp в свое приложение, вызвать эту страницу asp из своего настольного приложения. на новой странице asp вы можете делать все, что хотите (например, устанавливать переменную приложения с помощью request.servervariables …), затем в конце сделать перенаправление на «исходную» (зашифрованную) страницу asp…

Ответ №2:

Я не уверен насчет Application_OnStart(), но в вашем Session_OnStart() должна быть возможность получить серверные переменные. Я работаю над классическим приложением ASP, которое делает именно это. В настоящее время я нахожусь на компьютере с Linux, поэтому я не могу запустить код, только просматривать его по сети, но то, что мы делаем, это используем include в Global.asa, прямо над тегом script:

 <!--#include virtual="~inc/global.inc"-->
<script language=vbscript runat=server> 
  

Затем, в подзаголовке Session_OnStart мы используем вызов функции в этом глобальном.inc включении, которая использует запрос.Серверные переменные («REMOTE_ADDR») для извлечения удаленного IP-адреса и регистрации его в базе данных. Если это работает для удаленного IP, я думаю, это также должно работать для локального IP, хотя я не уверен, будет ли это регистрировать localhost (127.0.0.1) или внешний IP….

Не могли бы вы попробовать с запросом.Серверные переменные («REMOTE_ADDR»), просто чтобы посмотреть, работает ли это, если нет; какую ошибку вы получаете?

Кстати: способ, которым мы работаем (используя включение и вызов функции), не должен иметь значения; вы должны быть в состоянии сделать это непосредственно из Session_OnStart

Комментарии:

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

2. Вы также можете попробовать использовать объект microsoft serverxmlhttp, чтобы перейти к автоматизации. whatismyip.com/n09230945.asp Это даст вам ваш внешний IP-адрес. Однако я не знаю, можете ли вы создать объект serverxmlhttp в application_onstart()… Посмотрите на msdn.microsoft.com/en-us/library/ms766431 (v = против 85).aspx для получения дополнительной информации.

3. Только если разрешен доступ к Интернету. К сожалению, это приложение для внутренней сети, и внешний мир, скорее всего, заблокирован.

Ответ №3:

Извините, я опубликовал это в качестве комментария, но это альтернативный ответ:

Вы также можете попробовать использовать объект microsoft serverxmlhttp, чтобы получить доступ к API whatsmyip.com:http://automation.whatismyip.com/n09230945.asp

Это вернет внешний IP-адрес вашего сервера. Однако я не знаю, можете ли вы создать объект serverxmlhttp в application_onstart()…

Посмотрите на http://msdn.microsoft.com/en-us/library/ms766431 (v = против 85).aspx для получения дополнительной информации о том, как использовать serverxmlhttp для выполнения HTTP GET.

Комментарии:

1. На самом деле не будет работать в среде интрасети, где вредоносный внешний Интернет заблокирован брандмауэрами… 🙁 Хотя, хорошая идея…