ภาพรวม
ที่อยู่ MAC (Media Access Control Address) เป็นตัวระบุเฉพาะตัว (Unique Identifier) ที่กำหนดให้กับ Network Interface Card (NIC) แต่ละตัว ใช้ในชั้น Data Link Layer ของเครือข่าย เทคโนโลยีที่ใช้ MAC Address ได้แก่ Ethernet, Wi-Fi, Bluetooth, Fibre Channel ฯลฯ
โค้ดสำหรับดึง MAC Address
using System;
using System.Net.NetworkInformation;
public class MacAddressHelper
{
public static string GetMacAddress()
{
string macAddress = string.Empty;
// ดึง Network Interfaces ทั้งหมด
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
// เลือกเฉพาะ Interface ที่ทำงานอยู่ (Up) และไม่ใช่ Loopback
if (nic.OperationalStatus == OperationalStatus.Up
&& nic.NetworkInterfaceType != NetworkInterfaceType.Loopback)
{
// ดึง Physical Address (MAC)
PhysicalAddress pa = nic.GetPhysicalAddress();
if (pa != null && pa.GetAddressBytes().Length > 0)
{
macAddress = pa.ToString(); // รูปแบบ: 001122334455
break; // หยุดหลังเจอตัวแรกที่ใช้งานได้
}
}
}
return macAddress;
}
// รูปแบบมาตรฐาน XX:XX:XX:XX:XX:XX
public static string FormatMacAddress(string mac)
{
if (string.IsNullOrEmpty(mac) || mac.Length != 12)
return mac;
return string.Join(":",
Enumerable.Range(0, 6)
.Select(i => mac.Substring(i * 2, 2))
.ToArray());
}
}
// การใช้งาน
class Program
{
static void Main()
{
string mac = MacAddressHelper.GetMacAddress();
Console.WriteLine("MAC Address: " + MacAddressHelper.FormatMacAddress(mac));
}
}คำอธิบายโค้ดสำคัญ
1. NetworkInterface.GetAllNetworkInterfaces()
ดึงรายการ Network Interface ทั้งหมดบนเครื่อง (Ethernet, Wi-Fi, VPN, Loopback, Virtual adapters, ฯลฯ)
2. การกรอง Interface
nic.OperationalStatus == OperationalStatus.Up nic.NetworkInterfaceType != NetworkInterfaceType.Loopback
OperationalStatus.Up- Interface ทำงานอยู่ (Connected)- ข้าม Loopback (127.0.0.1) ซึ่งไม่มี MAC จริง
- อาจเพิ่มกรอง
nic.NetworkInterfaceType == NetworkInterfaceType.EthernetหรือWireless80211ตามต้องการ
3. GetPhysicalAddress()
คืนค่า PhysicalAddress object เรียก .ToString() ได้สตริง 12 ตัวอักษร Hex (เช่น 001122334455)
รูปแบบ MAC Address
| รูปแบบ | ตัวอย่าง |
|---|---|
| Raw (ToString) | 001122334455 |
| Colon-separated | 00:11:22:33:44:55 |
| Hyphen-separated | 00-11-22-33-44-55 |
| Cisco (Dot) | 0011.2233.4455 |
ข้อสังเกตสำคัญ
- เครื่องอาจมีหลาย Network Interface (Ethernet, Wi-Fi, Docker, Hyper-V, VPN) → ต้องกรองให้ถูกต้อง
- MAC Address อาจถูกปลอม (Spoof) ได้ → ไม่ควรใช้เพื่อ Security เพียงอย่างเดียว
- บาง Interface ไม่มี MAC (เช่น Tunnel, Loopback) → ต้องตรวจสอบ
GetAddressBytes().Length > 0 - ต้องเพิ่ม Reference:
System.Net.NetworkInformation - ใน .NET Core / .NET 5+ ทำงานได้บน Windows, Linux, macOS