Đây là một số mã C # trả về địa chỉ MAC của giao diện mạng hoạt động đầu tiên. Giả sử NetworkInterface
lắp ráp được thực hiện trong thời gian chạy (tức là Mono) được sử dụng trên các hệ điều hành khác thì điều này sẽ hoạt động trên các hệ điều hành khác.
Phiên bản mới: trả về NIC với tốc độ nhanh nhất cũng có địa chỉ MAC hợp lệ.
/// <summary>
/// Finds the MAC address of the NIC with maximum speed.
/// </summary>
/// <returns>The MAC address.</returns>
private string GetMacAddress()
{
const int MIN_MAC_ADDR_LENGTH = 12;
string macAddress = string.Empty;
long maxSpeed = -1;
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
log.Debug(
"Found MAC Address: " + nic.GetPhysicalAddress() +
" Type: " + nic.NetworkInterfaceType);
string tempMac = nic.GetPhysicalAddress().ToString();
if (nic.Speed > maxSpeed &&
!string.IsNullOrEmpty(tempMac) &&
tempMac.Length >= MIN_MAC_ADDR_LENGTH)
{
log.Debug("New Max Speed = " + nic.Speed + ", MAC: " + tempMac);
maxSpeed = nic.Speed;
macAddress = tempMac;
}
}
return macAddress;
}
Phiên bản gốc: chỉ trả về cái đầu tiên.
/// <summary>
/// Finds the MAC address of the first operation NIC found.
/// </summary>
/// <returns>The MAC address.</returns>
private string GetMacAddress()
{
string macAddresses = string.Empty;
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
if (nic.OperationalStatus == OperationalStatus.Up)
{
macAddresses += nic.GetPhysicalAddress().ToString();
break;
}
}
return macAddresses;
}
Điều duy nhất tôi không thích về cách tiếp cận này là nếu bạn thích một Miniport Gói của Nortel hoặc một loại kết nối VPN nào đó thì nó có khả năng được chọn. Theo như tôi có thể nói, không có cách nào để phân biệt MAC của một thiết bị vật lý thực tế với một số loại giao diện mạng ảo.