2016-01-08 16 views
0

我有一个配置的支架应用坐在IIS服务器上(在公共互联网上)如下:是否可以在Web应用程序中欺骗主机文件条目?

  • IP地址:ABCD
  • 主机头:的东西而不是公共的DNS .example.com的

(入口是不是在公共DNS只是因为它不必须的。这不仅是通过NAT主机头的安全性。)

为了让我的客户端连接到应用程序,我只是在我的hosts文件中添加一个条目:

ABCD something-not-public-dns.example.com

随着hosts文件入口一切都很好。

问题是我的一个客户端坐在ASP.NET Web应用程序中,我无法修改应用程序驻留的Web服务器的hosts文件。

因此,我的问题是否可以欺骗Web应用程序内的主机文件条目?

我在想是这样的:

string url = "something-not-public.example.com/myservice/mymethod"; 
var client = new WebClient(); 
client.Headers[HttpRequestHeader.ContentType] = "application/json"; 

// Set the destination IP for this request here! 

string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(MyObject); 
string response = client.UploadString(url, json); 

我会考虑上面的例子要求水平欺骗,这将是巨大的,但我也想知道是否应用水平欺骗也可以做到。通过这种方式,应用程序可以设置主机条目,并且从该应用程序中创建的所有请求都可以使用它们。

+0

也许复制http://stackoverflow.com/questions/5992700/can-i-temporarily-override-dns-resolution-within-a-net-application – Jack

+0

@的杰克 - 我不知道这是不是一个骗局。如果是这样,这对于这个特殊问题来说是一个非常难看的解决方案! :D – TTT

+0

我同意,虽然easyhook解决方案可行,但接受的答案是一个更好的解决方案。每天学习新东西 – Jack

回答

4

你正在绕错误的方式 - 而不是试图设置从域名到IP地址的映射,你应该简单地向IP请求,并显式地覆盖HTTP请求的主机头域名要使用:

string url = "A.B.C.D/myservice/mymethod"; 
var client = new WebClient(); 
client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
client.Headers[HttpRequestHeader.Host] = "something-not-public.example.com"; 
+0

它完美的作品。谢谢。 – TTT