簡體   English   中英

.Net IPAddress IPv4

[英].Net IPAddress IPv4

我有以下代碼:

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

當我轉換為String而不是像192.168.1.0或類似的IPv4地址時,我得到IPv6版本:fd80 :: 5dbe:5d89:e51b:d313地址。

有沒有辦法可以從IPAddress類型返回IPv4地址?

謝謝

您可以獲取第一個IPv4地址,而不是無條件地獲取AddressList的第一個元素:

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

dtb的解決方案可以在很多情況下使用。 但是,在許多情況下,用戶可能在其系統上設置了多個v4 IP。 有時這是因為他們有一些“虛擬”適配器(來自VirtualBox或VMWare等應用程序),或者因為他們有多個物理網絡適配器連接到他們的計算機。

不言而喻,在這些情況下,使用正確的IP非常重要。 您可能需要考慮詢問用戶哪個IP適當。

要獲取可用的v4 IP列表,您可以使用類似於以下內容的代碼:

'獲取包含所有可用IP的數組:Dim IPList()As 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

對我來說,使用“First”謂詞的解決方案無法正常工作,這是適用於我的代碼:

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;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM