문제

나는 로컬 PC의 IP 주소를 얻으려고 노력하고 있으며 다른 PC 중 하나는 V4 주소를 잘 가져 왔지만 코드는 다음과 같습니다.

Dns.GetHostEntry(Dns.GetHostName).AddressList(0).ToString()

IPv6 주소라고 생각하는 것을 반환합니다.

fe80::9c09:e2e:4736:4c62%11

IPv4 주소는 어떻게 얻습니까?

도움이 되었습니까?

해결책

부인 성명- IPv6이 설치되어 있지 않아서이를 수행하는 더 좋은 방법이있을 수 있지만 다음은 무엇을 반환 하는가.

Dns.GetHostEntry(Dns.GetHostName()).AddressList
    .Where(a => !a.IsIPv6LinkLocal && !a.IsIPv6Multicast && !a.IsIPv6SiteLocal)
    .First()
    .ToString();

편집 - VB로 묻는 것을 알지 못했기 때문에 다음으로 번역을 시도했습니다.

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()

이것은 폭발 할 수 있으므로 생산 코드로 취급하지 마십시오.

다른 팁

다음은 외부 서비스를 사용하지 않고도 라우팅 가능한 IPv4 IP를 얻는 솔루션입니다.

  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). 다른 것을 찾고 있다면 해당 부분을 제거하거나 수정할 수 있습니다.

나는 당신이 이것을 사용해야한다고 생각합니다 :

 Dim tmpHostName As String = System.Net.Dns.GetHostName()
 myIPaddress = System.Net.Dns.GetHostByName(tmpHostName).AddressList(0).ToString()

GetHostByName 쓸모 없지만 이것은 IPv4를 얻는 방법입니다. 왜요? 때문에 getbyhostname 기능은 IPv6 전에 생성되므로 기능은 fe80::9c09:e2e:4736:4c62%11.

아마도 재미있는 것은 컴퓨터에 모든 IP 주소를 표시하는이 작은 기능입니다.

Public Function getOwnIp() As String
        Dim hostIP As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
        Dim position As Integer = 0
        Dim ip As String = Nothing
        While ipList < hostIP.AddressList.Length
            ip += hostIP.AddressList(position).ToString & vbCrLf
            position += 1
        End While`enter code here`
        Return ip
    End Function

나는이 질문에 대한 답을 직접 찾고 있었고 내 필요에 적합한 것을 찾을 수 없었습니다. 나는 이것을 생각해 내기 전까지 인터넷을 가로 질러 다양한 답변을 실험 할 수있었습니다 (잘 작동합니다!). 이 게시물이 Google을 통한 최고의 결과이기 때문에 공유 할 것이라고 생각했습니다.

    ''''Routine to fetch IPv4 Network addresses for all local network interfaces.
    Dim adapters As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
    Dim adapter As NetworkInterface
        For Each adapter In adapters
            Dim properties As IPInterfaceProperties = adapter.GetIPProperties()
            If properties.UnicastAddresses.Count > 0 Then
                For Each unicastadress As UnicastIPAddressInformation In properties.UnicastAddresses
                    Dim ip As IPAddress = unicastadress.Address
                    If ip.AddressFamily = AddressFamily.InterNetwork Then
                        ComboBox1.Items.Add(ip.ToString)
                    End If
                Next unicastadress
            End If
        Next adapter

먼저 시스템 네임 스페이스를 애플리케이션으로 가져온 다음 인스턴스를 작성해야합니다. System.Net.NetworkInformation.IPAddressInformation 그리고 그것을 사용하십시오

예시

  Imports system.data.sqlclient
    imports system

Public class Form1
   Dim IPAdd As System.Net.NetworkInformation.IPAddressInformation

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 MsgBox("My IP Address is " & IPAdd.Address.ToString)
    End Sub
End Class
 Dim localIp As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
 txtLocal.Text = localIp.AddressList(1).ToString

내가 변경했음을 주목하십시오 (0) 인덱스로 (1).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top