İşte ilk operasyonel ağ arayüzünün MAC adresini döndüren bazı C # kodu. Derlemenin NetworkInterface
diğer işletim sistemlerinde kullanılan çalışma zamanında (yani Mono) uygulandığını varsayarsak, bu diğer işletim sistemlerinde çalışacaktır.
Yeni sürüm: Geçerli bir MAC adresine sahip olan en yüksek hızda NIC'yi döndürür.
/// <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;
}
Orijinal Sürüm: yalnızca birincisini döndürür.
/// <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;
}
Bu yaklaşımla ilgili hoşlanmadığım tek şey, bir Nortel Packet Miniport veya bir tür VPN bağlantısına sahipseniz, seçilme potansiyeline sahip olmasıdır. Anladığım kadarıyla, gerçek bir fiziksel aygıtın MAC'ini bir tür sanal ağ arabiriminden ayırmanın bir yolu yok.