如何在本地代理服务器中执行DNS请求?

时间:2012-11-22 14:56:12

标签: c# http dns proxy

我正在编写本地代理服务器。它已经适用于大多数请求。但有时我想解决主机名时遇到问题。这是我的工作:

当收到请求的标题时,我会过滤掉第一行。然后我从该行中取出Request-URL(位于两个空格之间)并将其存储到Uri对象中。之后,我用string host= uri.host;提取主机名 至少我进行了DNS呼叫:IPAddress[] ips = Dns.GetHostAddresses(host)[0]; (我怎么知道,我应该采用哪个阵列的IP。这些IP的区别是什么)

就像我说的那样,对于大多数工作正常的请求。但有一些地址无法解决。这里有一个例子:当我想打开 www.gmx.net 时,我首先得到HTML-File(这很好)。之后,浏览器重新加载了几个Web对象,如pics,javascript等。那些对象当然有一些URL。其中一个无法解决的网址是: ipv4-cout.gmx.net 。 尝试解决此URL会产生警告:声明的主机未知

我需要知道的另一件事是:如何处理Alias-Host-names?例如:当我在浏览器中输入主机名gmx.de时,它会自动将其解析为www.gmx.net。我知道,在具有CNAME类型的DNS服务器上有Recource Reccords,但我不知道如何实现它。

1 个答案:

答案 0 :(得分:0)

我会说他们按照DNS服务器发送的顺序返回,我找不到任何特定排序的引用。

Dns.GetHostAddresses Method

在大多数情况下,只有一个IP地址。在www.gmx.net的情况下,它们确实有2个,理论上,这意味着您可以循环请求。

www.gmx.net has address 212.227.223.5
www.gmx.net has address 212.227.223.4

供您参考。 pv4-cout.gmx.net在我的机器上无法解析,并且在以任何其他方式访问时会导致404。

gmx.de无法解析为www.gmx.net,网络服务器上有网址重定向。

Connecting to www.gmx.de|212.227.223.10|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.gmx.net/ [following]