给定目标URI,如何以编程方式确定对该URI进行的HTTP GET请求是否会向本地机器发出请求?
背景:有两个原因我需要这样做。一是我有一个mod_perl2应用程序响应HTTP请求。在这样做时,它有时需要进行HTTP请求以从目标URI检索一些数据。为了避免HTTP请求的无限递归,如果目标URI实际上会解析到当前机器,则需要避免进行HTTP请求。这是为了防止用户意外自己危害自己而不是作为安全检查。第二个原因是,如果我的应用程序接收到HTTP请求,我需要使用请求URI作为键查找一些元数据。问题是可能已经使用了几个URI同义词作为创建元数据时的键,因此我需要一种解决同义词的方法,但仅适用于本地主机上的URI。
问题并不像简单地查看URI是否为“localhost”,或其IP地址为127.0.0.1(或127.0.1.1或127.*)那样简单,因为:(a)目标URI可能使用解析到当前计算机上的IP地址的完全限定域名(例如foo.example.com);以及(b)一台计算机可以有几个IP地址。
操作系统必须拥有需要解决此问题的信息,因为它必须知道它所侦听的IP地址和端口。 这篇文章 讨论了尝试确定本地机器的IP地址(或地址,因为它可能有几个)的问题。也许我可以通过这种方式来确定本地机器的IP地址,然后或许我可以将这些IP地址与目标URI中的IP地址(或URI的域的gethostbyname返回的IP地址)进行比较。我真的需要这样做吗?这种方法存在问题吗?是否有更好的方法?
背景:有两个原因我需要这样做。一是我有一个mod_perl2应用程序响应HTTP请求。在这样做时,它有时需要进行HTTP请求以从目标URI检索一些数据。为了避免HTTP请求的无限递归,如果目标URI实际上会解析到当前机器,则需要避免进行HTTP请求。这是为了防止用户意外自己危害自己而不是作为安全检查。第二个原因是,如果我的应用程序接收到HTTP请求,我需要使用请求URI作为键查找一些元数据。问题是可能已经使用了几个URI同义词作为创建元数据时的键,因此我需要一种解决同义词的方法,但仅适用于本地主机上的URI。
问题并不像简单地查看URI是否为“localhost”,或其IP地址为127.0.0.1(或127.0.1.1或127.*)那样简单,因为:(a)目标URI可能使用解析到当前计算机上的IP地址的完全限定域名(例如foo.example.com);以及(b)一台计算机可以有几个IP地址。
操作系统必须拥有需要解决此问题的信息,因为它必须知道它所侦听的IP地址和端口。 这篇文章 讨论了尝试确定本地机器的IP地址(或地址,因为它可能有几个)的问题。也许我可以通过这种方式来确定本地机器的IP地址,然后或许我可以将这些IP地址与目标URI中的IP地址(或URI的域的gethostbyname返回的IP地址)进行比较。我真的需要这样做吗?这种方法存在问题吗?是否有更好的方法?
这篇帖子表明C#有一个函数HttpContext.Current.Request.IsLocal可以完成我需要的功能,但是我无法在perl中找到类似的东西。
之前我在perlmonks.org上问过这个问题(因为我在使用perl),但没有找到令人满意的答案。如果在Linux上普遍可用的其他编程语言(如C,bash或python)中有可用的解决方案,则也可以。我不需要保证在每种情况下都能正常工作的解决方案,但如果它能在大多数情况下工作,那就太好了。