Hier ist ein C # -Code, der die MAC-Adresse der ersten betriebsbereiten Netzwerkschnittstelle zurückgibt. Angenommen, dieNetworkInterface
Assembly ist in der Laufzeit (dh Mono) implementiert, die auf anderen Betriebssystemen verwendet wird, dann würde dies auf anderen Betriebssystemen funktionieren.
Neue Version: Gibt die Netzwerkkarte mit der schnellsten Geschwindigkeit zurück, die auch eine gültige MAC-Adresse hat.
/// <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;
}
Originalversion: Gibt nur die erste zurück.
/// <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;
}
Das einzige, was mir an diesem Ansatz nicht gefällt, ist, wenn Sie einen Nortel Packet Miniport oder eine Art VPN-Verbindung mögen, die möglicherweise ausgewählt werden kann. Soweit ich das beurteilen kann, gibt es keine Möglichkeit, den MAC eines tatsächlichen physischen Geräts von einer Art virtueller Netzwerkschnittstelle zu unterscheiden.