Berikut adalah beberapa kode C # yang mengembalikan alamat MAC dari antarmuka jaringan operasional pertama. Dengan asumsi NetworkInterface
perakitan diimplementasikan dalam runtime (yaitu Mono) yang digunakan pada sistem operasi lain maka ini akan bekerja pada sistem operasi lain.
Versi baru: mengembalikan NIC dengan kecepatan tercepat yang juga memiliki alamat MAC yang valid.
/// <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;
}
Versi Asli: baru saja mengembalikan yang pertama.
/// <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;
}
Satu-satunya hal yang saya tidak suka tentang pendekatan ini adalah jika Anda memiliki seperti Nortel Packet Miniport atau beberapa jenis koneksi VPN memiliki potensi untuk dipilih. Sejauh yang saya tahu, tidak ada cara untuk membedakan MAC perangkat fisik yang sebenarnya dari beberapa jenis antarmuka jaringan virtual.