C# .NET:为什么这个域不能解析?

C# .NET:为什么这个域不能解析?,c#,.net,dns,C#,.net,Dns,我试图通过编程测试给定域名是否存在 以下代码行按预期工作: IPHostEntry IPhst =Dns.GetHostEntry("google.com"); 但是,对于同一主机上的一些域,它会同时失败。例如,下面的代码抛出一个异常 IPHostEntry IPhst =Dns.GetHostEntry("bks-campus.ch"); 产生的异常与域名根本不存在时引发的异常相同 奇怪的是,这个域实际上是存在的。我能够从刚刚运行上述代码的同一台机器上浏览它 这里可能有什么问题?我如何解决

我试图通过编程测试给定域名是否存在

以下代码行按预期工作:

IPHostEntry IPhst =Dns.GetHostEntry("google.com");
但是,对于同一主机上的一些域,它会同时失败。例如,下面的代码抛出一个异常

IPHostEntry IPhst =Dns.GetHostEntry("bks-campus.ch");
产生的异常与域名根本不存在时引发的异常相同

奇怪的是,这个域实际上是存在的。我能够从刚刚运行上述代码的同一台机器上浏览它

这里可能有什么问题?我如何解决这个问题

编辑:Dig也同意该域名实际存在:

dig bks-campus.ch

; <<>> DiG 9.5.0-P2 <<>> bks-campus.ch
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14744
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;bks-campus.ch.                 IN      A

;; AUTHORITY SECTION:
bks-campus.ch.          3600    IN      SOA     dns1.bks-campus.ch. hostmaster.kanti-chur.ch. 1275546863 10800 3600 604800 86400

;; Query time: 1214 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Fri Jul  2 12:50:10 2010
;; MSG SIZE  rcvd: 94
dig bks-campus.ch
;  挖掘9.5.0-P2 bks-campus.ch
;; 全局选项:printcmd
;; 得到答案:

;; ->>HEADER尝试将
网络适配器的DNS服务器设置为
4.2.2.2
4.2.2.3
。大多数情况下,如果我没有弄错的话,这是可行的,因为有时候ISP的DNS服务器没有及时响应。请在评论中告诉我您的结果。

bks campus.ch
没有DNS条目。可能浏览器会转换为
www.bks-campus.ch
,它有一个DNS条目,可能也会从代码中工作


编辑:域名存在,但您的DNS可能不知道它。我的不知道,但它知道
www.bks-campus.ch

我想到了很多原因,但最有可能的是,您的DNS基础设施没有设置为解析此域

请记住,即使您可以从web浏览器浏览到它,如果您也要通过web代理,它也不会告诉您多少。它只是告诉您代理可以解析主机,而不是您的本地计算机

最简单的方法是从命令行尝试nslookup

nslookup bks-campus.ch
如果失败,您的计算机使用的DNS将无法解决此问题,因此您的代码无法解决此问题


如果通过,则需要进行更多的调查。发回更多信息:)

google.com有一个将其与IP地址关联的A记录。bks-campus.ch没有任何A、AAAA或CNAME记录,因此您会得到一个错误

当浏览器找不到域的A记录时,可能会自动添加www


编辑:您的dig输出确认bks-campus.ch存在,但没有记录。

;挖掘9.3.2任何bks-campus.ch@olympus
; <<>> DiG 9.3.2 <<>> any bks-campus.ch @olympus
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1406
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;bks-campus.ch.                 IN      ANY

;; ANSWER SECTION:
bks-campus.ch.          86400   IN      SOA     dns1.bks-campus.ch. hostmaster.kanti-chur.ch. 1275546863 10800 3600 604800 86400
bks-campus.ch.          86400   IN      MX      20 cws02.netgrouper.ch.
bks-campus.ch.          86400   IN      MX      20 cws01.netgrouper.ch.
bks-campus.ch.          86400   IN      NS      dns1.bks-campus.ch.

;; AUTHORITY SECTION:
bks-campus.ch.          86400   IN      NS      dns1.bks-campus.ch.

;; ADDITIONAL SECTION:
cws02.netgrouper.ch.    32548   IN      A       194.150.160.32

;; Query time: 179 msec
;; SERVER: 192.168.2.4#53(192.168.2.4)
;; WHEN: Fri Jul 02 13:00:48 2010
;; MSG SIZE  rcvd: 193
; (找到1台服务器) ;; 全局选项:printcmd ;; 得到答案:
;; ->>HEADER您的代码试图做的是查看域是否有bks-campus.ch的解析dns a记录。您要做的是请求域的SOA记录。请参阅此搜索MX记录的项目。只需将记录类型更改为SOA即可

仅当域已委托给名称服务器时,此操作才有效。有些域已注册,但未指向DNS服务器。在这些情况下,如果您在浏览器中输入域名,您只会收到一条错误消息

查明域是否已注册的最佳方法是进行WHOIS查找。这些由TLD注册中心运行,以允许人们检查谁已注册了域名。如果您通过telnet连接到whois.nic.coop的端口43,并键入域名“nosuchdomain.coop”,您将获得注册该域的用户的详细信息

.coop registry WHOIS server

For help on using this server use "?" (without the quotes).
For more .coop information browse to http://www.coop

nosuchdomain.coop
No domain records were found to match "nosuchdomain.coop"

--------------------------------------------------------------------------------

The .coop registry WHOIS database provides information for .coop registered
names only. Although every effort is made to maintain the accuracy of the WHOIS
data, accuracy cannot be guaranteed.

This service is intended only for query-based access. You agree that you will
use this data only for lawful purposes and that, under no circumstances will you
use this data to: (a) allow, enable, or otherwise support the transmission by
e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or
solicitations to entities other than the data recipient's own existing
customers; or (b) enable high volume, automated, electronic processes that send
queries or data to the systems of Registry Operator or any ICANN-Accredited
Registrar, except as reasonably necessary to register domain names or modify
existing registrations. The compilation, repackaging, dissemination or other use
of this Data is expressly prohibited without the prior written consent of
dotCoop. All rights reserved. dotCoop reserves the right to modify these terms
at any time. By submitting this query, you agree to abide by this policy.

BY USING THE WHOIS SERVICE AND THE DATA CONTAINED HEREIN OR IN ANY REPORT
GENERATED WITH RESPECT THERETO, IT IS ACCEPTED THAT DOTCOOP IS NOT LIABLE FOR
ANY DAMAGES OF ANY KIND ARISING OUT OF, OR IN CONNECTION WITH, THE REPORT OR THE
INFORMATION PROVIDED BY THE WHOIS SERVICE, NOR OMISSIONS OR MISSING INFORMATION.
THE RESULTS OF ANY WHOIS REPORT OR INFORMATION PROVIDED BY THE WHOIS SERVICE
CANNOT BE RELIED UPON IN CONTEMPLATION OF LEGAL PROCEEDINGS WITHOUT FURTHER
VERIFICATION, NOR DO SUCH RESULTS CONSTITUTE A LEGAL OPINION.

如果您在正确的服务器上打开一个到此端口的套接字,只需将域发送给他们,捕获响应,然后对其进行分析,以查看WHOIS服务器是否报告域是否已注册。

查看给定域是否存在的另一种方法是对相关域执行NS查找。如果域存在,它必须有一个NS记录,即使域的注册名称服务器超时。

我刚刚尝试了它,但它仍然不起作用。此外,如果这是一个超时问题,我认为解决的IP地址现在应该缓存在我的开发机器上。毕竟我一直在Firefox上浏览…-1:谢谢你的回复,但是你的假设是错误的。请看我上面的编辑。毛:如果我的DNS不知道,为什么dig会像我的后期编辑一样工作?它不知道。它显示了问题,但没有答案。现在你基本上是在反对正确的答案。为什么?+1@阿德里安:他的第一句话正确地回答了你的问题。再读一遍,我发现你在问两个问题:a)为什么域名不能解析为IP?[标题中]b)如何测试代码中是否存在域名?[文本中]无法使用System.Net.Dns,因为它总是先尝试获取IP,但失败。另一种选择是使用WHOIS查找(端口43),这样您就不需要依赖外部应用程序。乔纳森·斯坦顿:你说得对,我问了两个问题,这绝对不是一件好事。我之所以给出marked Simon的答案作为解决方案,是因为他是第一个为我指出正确方向的人,这样我就可以解决问题(通过执行MX和A记录查找)。不过,你必须安装一个外部应用程序。另一种选择是使用WHOIS查找(端口43)。@Jaroslav Jandek-huh?他解释说,DNS条目没有IPv4条目、IPv6条目和CNAME条目,因此.NET无法查找IP,因为没有要查找的IP。这是如何涉及到外部应用程序的?@Sekhat:我可以发誓我在帖子中看到了一个解析dig输出的建议。。。那就别管了。