首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VB.net获取计算机的本地IPv4

使用VB.net获取计算机的本地IPv4
EN

Stack Overflow用户
提问于 2009-10-29 16:18:48
回答 8查看 32.8K关注 0票数 6

我正在尝试获取本地PC的ip地址,而我的另一台PC可以很好地获取v4地址,但在这台PC上,代码是:

代码语言:javascript
复制
Dns.GetHostEntry(Dns.GetHostName).AddressList(0).ToString()

返回我认为是IPv6地址的内容:

代码语言:javascript
复制
fe80::9c09:e2e:4736:4c62%11

如何获取IPv4地址?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-10-29 16:32:16

免责声明-我没有安装IPv6,可能有一种更好的方法来实现此目的,但以下返回的内容是什么:

代码语言:javascript
复制
Dns.GetHostEntry(Dns.GetHostName()).AddressList
    .Where(a => !a.IsIPv6LinkLocal && !a.IsIPv6Multicast && !a.IsIPv6SiteLocal)
    .First()
    .ToString();

编辑-没有注意到你在VB中提问,所以我试着把它翻译成:

代码语言:javascript
复制
Dim s As String = Dns.GetHostEntry(Dns.GetHostName()).AddressList _
    .Where(Function(a As IPAddress) Not a.IsIPv6LinkLocal AndAlso Not a.IsIPv6Multicast AndAlso Not a.IsIPv6SiteLocal) _
    .First() _
    .ToString()

这可能会失败,所以不要把它当作产品代码。

票数 9
EN

Stack Overflow用户

发布于 2011-04-28 04:43:09

我的解决方案是在不使用外部服务的情况下获得可路由的IPv4 IP:

代码语言:javascript
复制
  Function GetLocalIP() As String
    Dim IPList As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName)

    For Each IPaddress In IPList.AddressList
      'Only return IPv4 routable IPs
      If (IPaddress.AddressFamily = Sockets.AddressFamily.InterNetwork) AndAlso (Not IsPrivateIP(IPaddress.ToString)) Then
        Return IPaddress.ToString
      End If
    Next
    Return ""
  End Function

  Function IsPrivateIP(ByVal CheckIP As String) As Boolean
    Dim Quad1, Quad2 As Integer

    Quad1 = CInt(CheckIP.Substring(0, CheckIP.IndexOf(".")))
    Quad2 = CInt(CheckIP.Substring(CheckIP.IndexOf(".") + 1).Substring(0, CheckIP.IndexOf(".")))
    Select Case Quad1
      Case 10
        Return True
      Case 172
        If Quad2 >= 16 And Quad2 <= 31 Then Return True
      Case 192
        If Quad2 = 168 Then Return True
    End Select
    Return False
  End Function

请注意,我的代码还在验证该范围是否可路由(IsPrivateIP)。如果您正在寻找其他内容,则可以删除或修改该部分。

票数 1
EN

Stack Overflow用户

发布于 2020-03-22 23:03:06

我使用了Cmd/Visual Basic的组合代码,它起作用了:

代码语言:javascript
复制
    Dim ResString As String = "result.txt"

    If File.Exists("result.txt") Then
        File.Delete("result.txt")
    End If

    Shell("cmd.exe /c  cd " & Application.StartupPath & " && ipconfig >> " & ResString & "&& exit", AppWinStyle.NormalFocus)

    Dim Ipv4 As String
    Dim Ipv4Found As Boolean = False
    Dim Ipv4Char As Integer = 43
    Dim Ipv4Str As String
    Threading.Thread.Sleep(1500)
    'Wait some seconds to create "result.txt"

    Dim Ipv4Reader As StreamReader
    Ipv4Reader = File.OpenText("result.txt")

    Do Until Ipv4Found = True

        Ipv4Str = Ipv4Reader.ReadLine()
        If Not Ipv4Str = Nothing Then
            If Ipv4Str.Contains("IPv4") Then
                Try
                    Ipv4 = Ipv4Str.Chars(Ipv4Char)
                    Do Until Ipv4Char = 60
                        Ipv4Char = Ipv4Char + 1
                        Ipv4 = Ipv4 & Ipv4Str.Chars(Ipv4Char)
                        'Read results step by step
                    Loop
                Catch ex As Exception
                End Try
                MsgBox("Your IPv4 Address is " & Ipv4)
                Ipv4Found = True
                Ipv4Reader.Close()

            End If
        Else

        End If
    Loop

如果您的计算机语言是英语,那么IPv4字符串中可能有一些不常见的字符(我的pc实际上是意大利语)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1642256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档