#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. На самом деле не будет работать в среде интрасети, где вредоносный внешний Интернет заблокирован брандмауэрами… 🙁 Хотя, хорошая идея…