Vb.net System.Net.Dns.GetHostAddresses(";)

Vb.net System.Net.Dns.GetHostAddresses(";),vb.net,dns,windows-xp-sp3,Vb.net,Dns,Windows Xp Sp3,我有一个我一直在开发的应用程序,当我的ISP因为DNS而关闭时,启动速度可能会很慢。我的ISP昨天宕机了3个小时,所以我没有太多考虑我添加的这段代码,直到我发现它启动起来总是很慢。这段代码应该返回您的IP地址,我对链接的读取表明应该立即返回,但事实并非如此,至少在我的机器上是如此 哦,昨天在互联网瘫痪之前,我升级了(oymoron)到XP SP3,还遇到了其他问题 因此,我的问题/要求: 我这样做对吗 如果你在你的机器上运行这个程序,返回你的IP地址需要39秒吗?它在我的身上 另一个注意事项是,

我有一个我一直在开发的应用程序,当我的ISP因为DNS而关闭时,启动速度可能会很慢。我的ISP昨天宕机了3个小时,所以我没有太多考虑我添加的这段代码,直到我发现它启动起来总是很慢。这段代码应该返回您的IP地址,我对链接的读取表明应该立即返回,但事实并非如此,至少在我的机器上是如此

哦,昨天在互联网瘫痪之前,我升级了(oymoron)到XP SP3,还遇到了其他问题

因此,我的问题/要求:

  • 我这样做对吗
  • 如果你在你的机器上运行这个程序,返回你的IP地址需要39秒吗?它在我的身上
  • 另一个注意事项是,我捕获了一个数据包,第一个请求没有通过网络发送,但第二个请求通过网络发送,并且很快得到了答复。所以问题是XP SP3中发生了什么,除了大脑之外,我还缺少什么

    最后一个音符。如果我解析FQDN,则一切正常

    Public Class Form1
    
    'http://msdn.microsoft.com/en-us/library/system.net.dns.gethostaddresses.aspx
    '
    'excerpt
    'The GetHostAddresses method queries a DNS server 
    'for the IP addresses associated with a host name.
    '
    'If hostNameOrAddress is an IP address, this address 
    'is returned without querying the DNS server.
    '
    'When an empty string is passed as the host name, 
    'this method returns the IPv4 addresses of the local host 
    
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) Handles Button1.Click
    
        Dim stpw As New Stopwatch
        stpw.Reset()
        stpw.Start()
        'originally Dns.GetHostEntry, but slow also 
        Dim myIPs() As System.Net.IPAddress = System.Net.Dns.GetHostAddresses("")
        stpw.Stop()
    
        Debug.WriteLine("'" & stpw.Elapsed.TotalSeconds)
        If myIPs.Length > 0 Then Debug.WriteLine("'" & myIPs(0).ToString)
        'debug
        '39.8990525
        '192.168.1.2
    
        stpw.Reset()
        stpw.Start()
        'originally Dns.GetHostEntry, but slow also 
        myIPs = System.Net.Dns.GetHostAddresses("www.vbforums.com")
        stpw.Stop()
    
        Debug.WriteLine("'" & stpw.Elapsed.TotalSeconds)
        If myIPs.Length > 0 Then Debug.WriteLine("'" & myIPs(0).ToString)
        'debug
        '0.042212
        '63.236.73.220
    End Sub
    
    End Class
    
    一点电源外壳测试:标记注释*
    *返回时间小于1秒。
    PS C:\Documents and Settings\MyPC>[System.Net.Dns]::GetHostAddresses(“www.msn.com”)
    IP地址字符串:65.55.17.27
    地址:454113089
    地址:互联网
    范围ID:
    ISIPv6多播:False
    IsIPv6LinkLocal:False
    IsIPv6SiteLocal:False
    IP地址字符串:65.55.17.26
    地址:437335873
    地址:互联网
    范围ID:
    ISIPv6多播:False
    IsIPv6LinkLocal:False
    IsIPv6SiteLocal:False
    *大约需要40秒
    PS C:\Documents and Settings\MyPC>[System.Net.Dns]::GetHostAddresses(“”)
    IPAddressToString:192.168.1.2
    地址:33663168
    地址:互联网
    范围ID:
    ISIPv6多播:False
    IsIPv6LinkLocal:False
    IsIPv6SiteLocal:False
    *返回时间小于1秒。
    PS C:\Documents and Settings\MyPC>[System.Net.Dns]::GetHostAddresses(“192.168.1.2”)
    IPAddressToString:192.168.1.2
    地址:33663168
    地址:互联网
    范围ID:
    ISIPv6多播:False
    IsIPv6LinkLocal:False
    IsIPv6SiteLocal:False
    *大约需要40秒
    PS C:\Documents and Settings\MyPC>[System.Net.Dns]::GetHostAddresses(“”)
    IPAddressToString:192.168.1.2
    地址:33663168
    地址:互联网
    范围ID:
    ISIPv6多播:False
    IsIPv6LinkLocal:False
    IsIPv6SiteLocal:False
    *我认为这应该返回几个地址
    PS C:\Documents and Settings\MyPC>[System.Net.Dns]::GetHostAddresses(“本地主机”)
    IPAddressToString:127.0.0.1
    地址:16777343
    地址:互联网
    范围ID:
    ISIPv6多播:False
    IsIPv6LinkLocal:False
    IsIPv6SiteLocal:False
    PS C:\Documents and Settings\MyPC>
    
    请参阅此处的第7篇文章

    FWIW此代码在我的机器上返回的时间小于1秒。我也使用opendns.commiliseconds,尽管出于某种原因,第一个需要更长的时间。另外,零索引不能保证是IP4地址,请看这篇文章:这段代码就是问题所在。实际代码检查IPv4和环回地址。事实就是这样;1-它对FQDN的运行时间为亚秒,2-它不会将相关代码的数据包放到线路上。那么,当我安装SP3时发生了什么呢。这将是一件简单的事情,值得一提的是,我运行了big M的“FixIt”程序,该程序将重新安装tcp/ip。没有区别,除了再次启动的喜悦。
     A little power shell testing:  Comments marked *
    
    
    
     *returns in < 1 sec.
     PS C:\Documents and Settings\MyPC> [System.Net.Dns]::GetHostAddresses("www.msn.com")
    
    
     IPAddressToString : 65.55.17.27
     Address           : 454113089
     AddressFamily     : InterNetwork
     ScopeId           :
     IsIPv6Multicast   : False
     IsIPv6LinkLocal   : False
     IsIPv6SiteLocal   : False
    
     IPAddressToString : 65.55.17.26
     Address           : 437335873
     AddressFamily     : InterNetwork
     ScopeId           :
     IsIPv6Multicast   : False
     IsIPv6LinkLocal   : False
     IsIPv6SiteLocal   : False
    
    
     *takes about 40 seconds
     PS C:\Documents and Settings\MyPC> [System.Net.Dns]::GetHostAddresses("")
    
    
     IPAddressToString : 192.168.1.2
     Address           : 33663168
     AddressFamily     : InterNetwork
     ScopeId           :
     IsIPv6Multicast   : False
     IsIPv6LinkLocal   : False
     IsIPv6SiteLocal   : False
    
    
     *returns in < 1 sec.
     PS C:\Documents and Settings\MyPC> [System.Net.Dns]::GetHostAddresses("192.168.1.2")
    
    
     IPAddressToString : 192.168.1.2
     Address           : 33663168
     AddressFamily     : InterNetwork
     ScopeId           :
     IsIPv6Multicast   : False
     IsIPv6LinkLocal   : False
     IsIPv6SiteLocal   : False
    
    
     *takes about 40 seconds
     PS C:\Documents and Settings\MyPC> [System.Net.Dns]::GetHostAddresses("")
    
    
     IPAddressToString : 192.168.1.2
     Address           : 33663168
     AddressFamily     : InterNetwork
     ScopeId           :
     IsIPv6Multicast   : False
     IsIPv6LinkLocal   : False
     IsIPv6SiteLocal   : False
    
    
     *i thought this should return several addresses
     PS C:\Documents and Settings\MyPC> [System.Net.Dns]::GetHostAddresses("localhost")
    
    
     IPAddressToString : 127.0.0.1
     Address           : 16777343
     AddressFamily     : InterNetwork
     ScopeId           :
     IsIPv6Multicast   : False
     IsIPv6LinkLocal   : False
     IsIPv6SiteLocal   : False
    
    
    
     PS C:\Documents and Settings\MyPC>