2011-05-26 26 views
0

虽然看起来这已被问了很多次,但这里有一个令人讨厌的扭曲...获取global.asa的子Application_OnStart中的本地IP地址?

首先,我正在调用同一本地系统上的网页的桌面应用程序。这个Web应用程序然后调用第二个服务器(在本地网络中)并需要将它自己的IP地址传递给另一个服务器。很容易,当然:Request.ServerVariables("LOCAL_ADDR"),我完成了...

它不会在这种情况下工作...本地Web应用程序的代码是用传统ASP编写的,几乎每个源文件都是加密的,因此我不能修改它的代码。我所能解决的只有global.asa文件。在global.asa的Application_OnStart事件中,是Application("InternalIp") = "172.22.14.59"行,事实上,这是本地IP地址,硬编码...此应用程序设置在代码的其余部分用于引用IP地址。

但是,我的本地网络中的IP地址每天都会改变,所以我每天都需要修改global.asa以包含我的新IP地址。我可以编写一个小应用程序,它会在启动时每天为我修改global.asa,但我更愿意看到一个解决方案,其中global.asa足够聪明,可以检测到这个IP地址本身!
不幸的是,IP地址必须在应用程序的开始处知道,而不是在会话开始时,否则我可以在Session_OnStart事件中使用Application("InternalIp") = Request.ServerVariables("LOCAL_ADDR")。试过这个,应用程序崩溃了,所以它不会工作。
但是Application_OnStart中的那行代码将不起作用,因为Request在当时是未知的,因此也会崩溃。 (试了一下,没有工作...)

所以,我的局限是我需要以可靠的方式获取global.asa的Application_OnStart事件中的IP地址。不,使用DNS名称也不起作用。 (也试过了,没有工作。)我有什么选择?

回答

1

你可以使用命令行(wscript.shell)和ipconfig?

或写在一个文本文件您的IP地址(与其他工具的帮助下),然后读出该文本文件

,你也可以将ASP页添加到您的应用程序,调用ASP页面从您的桌面应用程序。在新的asp页面上,你可以找到你想要的一切(例如,在request.servervariables的帮助下设置应用程序var ...),然后在最后做一个重定向到“原始”(加密的)asp页面...

0

我不确定Application_Onstart(),但是在你的Session_onStart()中应该有可能获得servervariables。 我在一个经典的ASP应用程序上工作,就是这么做的。我目前在一台linux机器上,所以我无法运行代码,只能通过网络查看它,但我们所做的是在Global.asa中使用include,仅位于脚本标记的上方:

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

然后,在SUB Session_OnStart中,我们使用对该函数的调用,该函数使用Request.ServerVariables(“REMOTE_ADDR”)来获取远程IP并将其记录在数据库中。如果它适用于远程I.P.我认为这也适用于当地的I.P.虽然我不确定它是否会然后登录本地主机(127.0.0.1)或外部IP ...

你可以尝试使用Request.ServerVariables(“REMOTE_ADDR”),只是为了看看是否有效如果它没有;你得到的错误是什么?顺便说一下:我们的工作方式(使用include和函数调用)应该没有关系;你应该能够直接从的Session_OnStart

+0

由于没有会话,Application_Onstart无法通过会话变量访问服务器变量。最大的问题是代码是依靠这个IP地址在会话开始之前设置的... – 2011-06-03 13:52:17

+0

您也可以尝试使用microsofts serverxmlhttp对象来执行GET以http://automation.whatismyip.com/n09230945.asp 这会给你你的外部IP地址。我不知道你是否可以在application_onstart()中瞬时化serverxmlhttp对象,但是... 请看http://msdn.microsoft.com/en-us/library/ms766431(v=vs.85).aspx获取更多信息。 – 2011-06-03 14:40:58

+0

只允许访问互联网。不幸的是,这是一个IntrAnet应用程序,外部世界很可能被阻止。 – 2011-06-06 08:31:36

0

对不起做到这一点,我贴这个作为一个评论,但它是一个备选答案:

您还可以尝试使用微软ServerXMLHTTP对象做一个GET的API whatsmyip.com:http://automation.whatismyip.com/n09230945.asp

这将返回您的服务器的外部IP地址。我不知道你是否可以在application_onstart()中瞬时化serverxmlhttp对象,但是...

有关如何使用serverxmlhttp执行HTTP GET的更多信息,请参阅http://msdn.microsoft.com/en-us/library/ms766431(v=vs.85).aspx

+0

实际上,在防火墙封锁邪恶外部互联网的内部网环境中工作...... :-(好主意,但...... – 2011-06-06 08:30:12