'The Ruby way 'Socket.ip_address_list.select(&:ipv4?).collect(&:ip_address) 'Amateur's way: With indexed loop Function Get_Local_IPv4_Addresses1() As String() Dim All_Addresses() As IPAddress All_Addresses = Dns.GetHostAddresses(Dns.GetHostName) Dim Result() As String = {} For i = 0 To All_Addresses.Length - 1 If All_Addresses(i).AddressFamily = InterNetwork Then ReDim Preserve Result(Result.Length) Result(Result.Length - 1) = All_Addresses(i).ToString End If Next Return Result End Function 'Professional's way. With "for each" loop. No need to declare array to hold results Function Get_Local_IPv4_Addresses2() As String() Dim Result() As String = {} For Each ip In Dns.GetHostAddresses(Dns.GetHostName()) If ip.AddressFamily = Sockets.AddressFamily.InterNetwork Then ReDim Preserve Result(Result.Length) Result(Result.Length - 1) = ip.ToString() End If Next Return Result End Function 'Expert's way. With generic collections and lambda expressions Function Get_Local_IPv4_Addresses3() As String() Dim All_Addresses() As IPAddress All_Addresses = Array.FindAll(Dns.GetHostAddresses(Dns.GetHostName()), Function(ip) ip.AddressFamily = InterNetwork) Return Array.ConvertAll(All_Addresses, Function(ip) ip.ToString()) End Function