Tôi có một VirtualBox VM được cài đặt trên máy của mình và như vậy có một adapter ethernet xuất hiện cho nó. Tôi liệt kê qua danh sách các địa chỉ IP máy tính của tôi qua những điều sau đây:C# - Tìm địa chỉ IP cục bộ của máy tôi và không phải là máy ảo
public string GetLocalIpAddress()
{
try
{
string strHostName = Dns.GetHostName();
// Then using host name, get the IP address list..
IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
foreach (IPAddress ip in ipEntry.AddressList)
{
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
return string.Format("({0})", ip.ToString());
}
}
}
catch(Exception e)
{
Global.ApplicationLog.AddApplicationLog(EnumAppEventTypes.SYSTEM_ERROR, e.ToString());
}
return "";
}
Vấn đề của tôi là rằng bộ chuyển đổi ethernet của máy ảo cũng bắt với điều kiện:
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
Có một cách để chọn địa chỉ IP cục bộ của máy của tôi và bỏ qua máy ảo của tôi?
Thật không may lớp IPAddress dường như không giữ tên bộ điều hợp ethernet vì vậy tôi không thể loại bỏ bộ điều hợp ethernet VM bằng phương pháp đó. – n00b
Vâng, bạn có thể cần phải thay đổi cách tiếp cận của bạn bằng cách sử dụng phương thức NetworkInterface.GetAllNetworkInterfaces(). Nó sẽ trả về tất cả các giao diện, và sau đó bạn có thể liệt kê tất cả các địa chỉ IP có sẵn cho mỗi giao diện. – pennanth
Hi pennanth, tôi dường như không thể tìm thấy bất kỳ biến thành viên nào hiển thị địa chỉ IP bên trong lớp NetworkInterface. Ngoài ra sửa tôi nếu tôi sai nhưng bằng cách sử dụng tên của lớp NetworkInterface bạn có thể phá vỡ nó bằng cách đổi tên tên bộ điều hợp ethernet? Tôi đang tìm kiếm một giải pháp đáng tin cậy hơn là – n00b