2010-01-12 32 views
7

Tôi có đoạn mã sau:Net IPAddress IPv4

Dim ipAdd As IPAddress = Dns.GetHostEntry(strHostname).AddressList(0) 
Dim strIP As String = ipAdd.ToString() 

Khi tôi chuyển sang chuỗi thay vì một địa chỉ IPv4 như 192.168.1.0 hoặc tương tự tôi nhận được phiên bản IPv6: fd80 :: 5dbe: 5d89: e51b : địa chỉ d313.

Có cách nào tôi có thể trả lại địa chỉ IPv4 từ loại IPAddress không?

Cảm ơn

Trả lời

15

Thay vì vô điều kiện tham gia các yếu tố đầu tiên của AddressList, bạn có thể lấy địa chỉ IPv4 đầu tiên: giải pháp

var address = Dns.GetHostEntry(strHostname) 
       .AddressList 
       .First(ip => ip.AddressFamily == AddressFamily.InterNetwork); 
+0

Đây là phiên bản VB của điều đó: Dim ipAdd Như IPAddress = Dns.GetHostEntry ("aol.com"). AddressList.First (Function (f) f.AddressFamily = Sockets.AddressFamily.InterNetwork) –

2

DTB sẽ làm việc trong nhiều tình huống. Tuy nhiên, trong nhiều trường hợp, người dùng có thể có nhiều thiết lập IP v4 trên hệ thống của họ. Đôi khi điều này là bởi vì họ có một số adapter 'ảo' (từ các ứng dụng như VirtualBox hoặc VMWare) hoặc bởi vì họ có nhiều hơn một bộ điều hợp mạng vật lý được kết nối với máy tính của họ.

Không cần phải nói rằng trong những trường hợp này, điều quan trọng là phải sử dụng đúng IP. Bạn có thể muốn xem xét yêu cầu người sử dụng mà IP là thích hợp.

Để có được một danh sách các IP v4 có thể sử dụng bạn có thể sử dụng mã tương tự như:

'Nhận một mảng chứa tất cả các IP có sẵn: Dim IPList() Như IPAddress = Net.Dns.GetHostEntry (Net. Dns.GetHostName.ToString) .AddressList

'Copy valid IPs from IPList to FinalIPList 
Dim FinalIPList As New ArrayList(IPList.Length) 
For Each IP As IPAddress In IPList 
    'We want to keep IPs only if they are IPv4 and not a 'LoopBack' device 
    '(an InterNetwork AddressFamily indicates a v4 IP) 
    If ((Not IPAddress.IsLoopback(IP)) And (IP.AddressFamily = AddressFamily.InterNetwork)) Then 
     FinalIPList.Add(IP) 
    End If 
Next IP 
0

đối với tôi, giải pháp với các "đầu tiên" vị không hoạt động đúng, đây là mã mà làm việc cho tôi:

public static string GetLocalIP() 
     { 
      string ipv4Address = String.Empty; 

      foreach (IPAddress currrentIPAddress in Dns.GetHostAddresses(Dns.GetHostName())) 
      { 
       if (currrentIPAddress.AddressFamily.ToString() == System.Net.Sockets.AddressFamily.InterNetwork.ToString()) 
       { 
        ipv4Address = currrentIPAddress.ToString(); 
        break; 
       } 
      } 

      return ipv4Address; 
     } 
Các vấn đề liên quan