【发布时间】:2016-01-08 08:26:53
【问题描述】:
如果从HttpContext 的HttpRequest 的Headers 集合中提取HOST 值,有没有办法确定返回的值是DNS 解析名称还是直接IP 地址?
示例用法
string host = HttpContext.Current.Request.Headers["HOST"];
if (host.IsIPAddress()) ... /// Something like this ?
or
(host.IsDNSResolved()) // Or this?
总结
很明显,可以对结果进行正则表达式模式测试以查找 IP 模式,但HttpContext 或更可能是HttpRequest 上是否有属性,甚至是来自助手的外部静态方法哪个类可以代替?
【问题讨论】:
-
也许一个辅助问题是,.Net 中如何获得 DNS 列表?虽然很大......
-
Host 标头由客户端 (en.wikipedia.org/wiki/List_of_HTTP_header_fields) 发送。从服务器端,您可以使用 Request.UserHostName 和/或 Request.UserHostAddress 而不是使用客户端标头?
-
我不明白读取 HOST 值的目的,因为它将与您的服务器的部署位置相同,除非它位于与处理请求的服务器不同的服务器上的负载均衡器后面。您可以做的一种方法是使用 Dns.GetHostName() 获取执行此语句的机器的主机名,以与您从 HOST 标头读取的值进行比较
-
@Gururaj 代码最初是在某些东西背后,我不记得那是一年半前,但是是的,它需要了解有关已解析名称 vs正确路由的 IP。
-
@OmegaMan - 您可以使用 Dns.GetHostName() 来获取 HostName 并将其与标头中的 Host 值进行比较。我希望它能解决您的问题
标签: c# .net dns ip httprequest