นี่คือรหัส C # บางส่วนที่ส่งคืนที่อยู่ MAC ของส่วนต่อประสานเครือข่ายปฏิบัติงานแรก สมมติว่าNetworkInterface
แอสเซมบลีถูกนำไปใช้ในรันไทม์ (เช่น Mono) ที่ใช้กับระบบปฏิบัติการอื่นดังนั้นนี่จะทำงานกับระบบปฏิบัติการอื่น
เวอร์ชันใหม่: ส่งคืน NIC ด้วยความเร็วที่เร็วที่สุดที่มีที่อยู่ MAC ที่ถูกต้อง
/// <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;
}
เวอร์ชั่นดั้งเดิม: เพียงคืนค่าแรก
/// <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;
}
สิ่งเดียวที่ฉันไม่ชอบเกี่ยวกับวิธีนี้คือถ้าคุณมีเหมือน Nortel Packet Miniport หรือการเชื่อมต่อ VPN บางประเภทมันมีศักยภาพที่จะถูกเลือก เท่าที่ฉันสามารถบอกได้ว่าไม่มีวิธีแยกแยะ MAC ของอุปกรณ์ทางกายภาพจริงจากอินเทอร์เฟซเครือข่ายเสมือนบางประเภท