Metode yang andal untuk mendapatkan alamat MAC mesin di C #

132

Saya perlu cara untuk mendapatkan alamat MAC mesin terlepas dari OS yang dijalankan menggunakan C #. Aplikasi harus bekerja pada XP / Vista / Win7 32 dan 64 bit serta pada OS tersebut tetapi dengan standar bahasa asing. Banyak perintah C # dan kueri OS tidak berfungsi di seluruh OS. Ada ide? Saya telah menggores output "ipconfig / all" tetapi ini sangat tidak dapat diandalkan karena format output berbeda pada setiap mesin.

Terima kasih


sumber
7
Ketika Anda mengatakan di seluruh OS, maksud Anda di berbagai Microsoft OS?
John Weldon

Jawaban:

137

Solusi bersih

var macAddr = 
    (
        from nic in NetworkInterface.GetAllNetworkInterfaces()
        where nic.OperationalStatus == OperationalStatus.Up
        select nic.GetPhysicalAddress().ToString()
    ).FirstOrDefault();

Atau:

String firstMacAddress = NetworkInterface
    .GetAllNetworkInterfaces()
    .Where( nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback )
    .Select( nic => nic.GetPhysicalAddress().ToString() )
    .FirstOrDefault();
Mohammed A. Fadil
sumber
44
Atau lambda, kalau itu yang kamu mau! return NetworkInterface.GetAllNetworkInterfaces().Where(nic => nic.OperationalStatus == OperationalStatus.Up).Select(nic => nic.GetPhysicalAddress().ToString()).FirstOrDefault();(Jika itu bukan hal Anda, itu harus menjadi milik Anda.)
GONeale
7
Cara ringkas untuk mendapatkan yang tercepat: var networks = NetworkInterface.GetAllNetworkInterfaces(); var activeNetworks = networks.Where(ni => ni.OperationalStatus == OperationalStatus.Up && ni.NetworkInterfaceType != NetworkInterfaceType.Loopback); var sortedNetworks = activeNetworks.OrderByDescending(ni => ni.Speed); return sortedNetworks.First().GetPhysicalAddress().ToString();
Graham Laight
1
Memilih dulu tidak selalu merupakan pilihan terbaik. Memilih koneksi yang paling sering digunakan: stackoverflow.com/a/51821927/3667
Ramunas
Catatan pengoptimalan: Anda bisa menelepon FirstOrDefaultsebelum final Select. Dengan cara ini, itu hanya akan mendapatkan alamat fisik dan cerita bersambung untuk yang sebenarnya NetworkInterfaceAnda dapatkan. Jangan lupa untuk menambahkan cek nol (?) Setelah tanda FirstOrDefault.
GregaMohorko
Cara komputasi yang lebih cepat untuk mendapatkannya, Anda tidak perlu mengevaluasi semua jaringan yang sesuai dengan kondisi yang diberikan, Anda hanya perlu yang pertama dari mereka: NetworkInterface .GetAllNetworkInterfaces() .FirstOrDefault(nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback)? .GetPhysicalAddress().ToString();
Alessandro Muzzi
80

Berikut adalah beberapa kode C # yang mengembalikan alamat MAC dari antarmuka jaringan operasional pertama. Dengan asumsi NetworkInterfaceperakitan 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.

blak3r
sumber
6
Jangan hanya memilih antarmuka operasional pertama. Ini bisa mengembalikan antarmuka Loopback, kartu 3G yang sesekali terhubung dan sebagainya, yang mungkin bukan yang Anda inginkan. NetworkInterfaceType ( msdn.microsoft.com/en-us/library/… ) akan memberi Anda informasi lebih lanjut tentang koneksi NetworkInterface sehingga Anda dapat membuat pilihan yang lebih terinformasi. Juga ingat bahwa mungkin ada banyak koneksi aktif pada mesin dan pesanan mereka mungkin tidak dapat diprediksi.
Dave R.
@DaveR. Saya melihat NetworkInterfaceType, pada dasarnya hampir selalu mengembalikan Ethernet bahkan ketika itu adalah adaptor virtual dalam pengalaman saya, jadi saya merasa itu tidak berguna.
blak3r
1
Anda harus memilih Antarmuka dengan GatewayMetric terendah. Ini haruslah koneksi yang memiliki "rute tercepat, paling dapat diandalkan, atau paling tidak sumber daya". Pada dasarnya itu akan memberi Anda antarmuka yang lebih disukai Windows untuk digunakan. Namun, saya pikir Anda perlu WMI untuk benar-benar mendapatkannya. Saya akan melihat apakah saya bisa
membuatnya
6
Untuk kelengkapan, kelas NetworkInterface diakses denganusing System.Net.NetworkInformation;
iancoleman
1
FWIW, jika Anda memiliki NIC gigabit dan Hyper-V diinstal Anda juga akan memiliki NIC virtual 10gigabit. :) Masalah sulit untuk dipecahkan ...
Christopher Painter
10

The MAC address milik kelas Win32_NetworkAdapterConfiguration WMI dapat menyediakan Anda dengan alamat MAC adaptor ini. (System.Management Namespace)

MACAddress

    Data type: string
    Access type: Read-only

    Media Access Control (MAC) address of the network adapter. A MAC address is assigned by the manufacturer to uniquely identify the network adapter.

    Example: "00:80:C7:8F:6C:96"

Jika Anda tidak terbiasa dengan WMI API (Instrumentasi Manajemen Windows), ada tinjauan umum yang baik untuk aplikasi .NET.

WMI tersedia di semua versi windows dengan .Net runtime.

Ini contoh kode:

System.Management.ManagementClass mc = default(System.Management.ManagementClass);
ManagementObject mo = default(ManagementObject);
mc = new ManagementClass("Win32_NetworkAdapterConfiguration");

ManagementObjectCollection moc = mc.GetInstances();
    foreach (var mo in moc) {
        if (mo.Item("IPEnabled") == true) {
              Adapter.Items.Add("MAC " + mo.Item("MacAddress").ToString());
         }
     }
Bayard Randel
sumber
9

WMI adalah solusi terbaik jika mesin yang Anda hubungkan adalah mesin windows, tetapi jika Anda melihat linux, mac, atau jenis adaptor jaringan lainnya, maka Anda perlu menggunakan sesuatu yang lain. Berikut ini beberapa opsi:

  1. Gunakan perintah DOS nbtstat -a. Buat proses, panggil perintah ini, parsing output.
  2. Pertama-tama Ping IP untuk memastikan NIC Anda cache perintah di tabel ARP itu, kemudian gunakan perintah DOS arp -a. Parsing output dari proses seperti pada opsi 1.
  3. Gunakan panggilan tidak terkelola yang ditakuti untuk mengirimarp di iphlpapi.dll

Inilah contoh item # 3. Ini tampaknya menjadi pilihan terbaik jika WMI bukan solusi yang layak:

using System.Runtime.InteropServices;
...
[DllImport("iphlpapi.dll", ExactSpelling = true)]
        public static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);
...
private string GetMacUsingARP(string IPAddr)
{
    IPAddress IP = IPAddress.Parse(IPAddr);
    byte[] macAddr = new byte[6];
    uint macAddrLen = (uint)macAddr.Length;

    if (SendARP((int)IP.Address, 0, macAddr, ref macAddrLen) != 0)
        throw new Exception("ARP command failed");

    string[] str = new string[(int)macAddrLen];
    for (int i = 0; i < macAddrLen; i++)
        str[i] = macAddr[i].ToString("x2");

    return string.Join(":", str);
}

Untuk memberi kredit pada saat jatuh tempo, ini adalah dasar untuk kode itu: http://www.pinvoke.net/default.aspx/iphlpapi.sendarp#

Brian Duncan
sumber
Saya mencari hal yang sama dengan OP dan ini adalah hal yang tepat saya butuhkan!
QueueHammer
Dalam opsi 1 dan 2, maksud Anda perintah DOS jika Anda menggunakan mesin windows dan perintah yang setara di Linux atau Mac, kan?
Raikol Amaro
8

Kami menggunakan WMI untuk mendapatkan alamat mac antarmuka dengan metrik terendah, mis. Jendela antarmuka akan lebih suka menggunakan, seperti ini:

public static string GetMACAddress()
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true");
    IEnumerable<ManagementObject> objects = searcher.Get().Cast<ManagementObject>();
    string mac = (from o in objects orderby o["IPConnectionMetric"] select o["MACAddress"].ToString()).FirstOrDefault();
    return mac;
}

Atau di Silverlight (butuh kepercayaan yang ditingkatkan):

public static string GetMACAddress()
{
    string mac = null;
    if ((Application.Current.IsRunningOutOfBrowser) && (Application.Current.HasElevatedPermissions) && (AutomationFactory.IsAvailable))
    {
        dynamic sWbemLocator = AutomationFactory.CreateObject("WbemScripting.SWBemLocator");
        dynamic sWbemServices = sWbemLocator.ConnectServer(".");
        sWbemServices.Security_.ImpersonationLevel = 3; //impersonate

        string query = "SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true";
        dynamic results = sWbemServices.ExecQuery(query);

        int mtu = int.MaxValue;
        foreach (dynamic result in results)
        {
            if (result.IPConnectionMetric < mtu)
            {
                mtu = result.IPConnectionMetric;
                mac = result.MACAddress;
            }
        }
    }
    return mac;
}
AVee
sumber
7
public static PhysicalAddress GetMacAddress()
{
    var myInterfaceAddress = NetworkInterface.GetAllNetworkInterfaces()
        .Where(n => n.OperationalStatus == OperationalStatus.Up && n.NetworkInterfaceType != NetworkInterfaceType.Loopback)
        .OrderByDescending(n => n.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
        .Select(n => n.GetPhysicalAddress())
        .FirstOrDefault();

    return myInterfaceAddress;
}
Tony
sumber
Jika saya menjalankan kode ini, apakah akan mendapatkan alamat orang yang menjalankan aplikasi? Berarti itu tidak akan mendapatkan alamat IP server tempat ini di-host, benar?
Nate Pet
Ia mendapat alamat MAC dari Mesin Host, Server.
Tony
6

IMHO mengembalikan alamat mac pertama bukanlah ide yang baik, terutama ketika mesin virtual dihosting. Oleh karena itu saya memeriksa jumlah byte yang dikirim / diterima dan memilih koneksi yang paling sering digunakan, yang tidak sempurna, tetapi harus benar 9/10 kali.

public string GetDefaultMacAddress()
{
    Dictionary<string, long> macAddresses = new Dictionary<string, long>();
    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        if (nic.OperationalStatus == OperationalStatus.Up)
            macAddresses[nic.GetPhysicalAddress().ToString()] = nic.GetIPStatistics().BytesSent + nic.GetIPStatistics().BytesReceived;
    }
    long maxValue = 0;
    string mac = "";
    foreach(KeyValuePair<string, long> pair in macAddresses)
    {
        if (pair.Value > maxValue)
        {
            mac = pair.Key;
            maxValue = pair.Value;
        }
    }
    return mac;
}
Ramunas
sumber
6

Metode ini akan menentukan alamat MAC dari Antarmuka Jaringan yang digunakan untuk menghubungkan ke url dan port yang ditentukan.

Semua jawaban di sini tidak mampu mencapai tujuan ini.

Saya menulis jawaban ini bertahun-tahun yang lalu (tahun 2014). Jadi saya memutuskan untuk memberikan sedikit "face lift". Silakan lihat bagian pembaruan

    /// <summary>
    /// Get the MAC of the Netowrk Interface used to connect to the specified url.
    /// </summary>
    /// <param name="allowedURL">URL to connect to.</param>
    /// <param name="port">The port to use. Default is 80.</param>
    /// <returns></returns>
    private static PhysicalAddress GetCurrentMAC(string allowedURL, int port = 80)
    {
        //create tcp client
        var client = new TcpClient();

        //start connection
        client.Client.Connect(new IPEndPoint(Dns.GetHostAddresses(allowedURL)[0], port));

        //wai while connection is established
        while(!client.Connected)
        {
            Thread.Sleep(500);
        }

        //get the ip address from the connected endpoint
        var ipAddress = ((IPEndPoint)client.Client.LocalEndPoint).Address;

        //if the ip is ipv4 mapped to ipv6 then convert to ipv4
        if(ipAddress.IsIPv4MappedToIPv6)
            ipAddress = ipAddress.MapToIPv4();        

        Debug.WriteLine(ipAddress);

        //disconnect the client and free the socket
        client.Client.Disconnect(false);
        
        //this will dispose the client and close the connection if needed
        client.Close();

        var allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

        //return early if no network interfaces found
        if(!(allNetworkInterfaces?.Length > 0))
            return null;

        foreach(var networkInterface in allNetworkInterfaces)
        {
            //get the unicast address of the network interface
            var unicastAddresses = networkInterface.GetIPProperties().UnicastAddresses;
           
            //skip if no unicast address found
            if(!(unicastAddresses?.Count > 0))
                continue;

            //compare the unicast addresses to see 
            //if any match the ip address used to connect over the network
            for(var i = 0; i < unicastAddresses.Count; i++)
            {
                var unicastAddress = unicastAddresses[i];

                //this is unlikely but if it is null just skip
                if(unicastAddress.Address == null)
                    continue;
                
                var ipAddressToCompare = unicastAddress.Address;

                Debug.WriteLine(ipAddressToCompare);

                //if the ip is ipv4 mapped to ipv6 then convert to ipv4
                if(ipAddressToCompare.IsIPv4MappedToIPv6)
                    ipAddressToCompare = ipAddressToCompare.MapToIPv4();

                Debug.WriteLine(ipAddressToCompare);

                //skip if the ip does not match
                if(!ipAddressToCompare.Equals(ipAddress))
                    continue;

                //return the mac address if the ip matches
                return networkInterface.GetPhysicalAddress();
            }
              
        }

        //not found so return null
        return null;
    }

Untuk memanggilnya Anda harus mengirimkan URL agar terhubung seperti ini:

var mac = GetCurrentMAC("www.google.com");

Anda juga dapat menentukan nomor port. Jika tidak ditentukan standarnya adalah 80.

PEMBARUAN:

2020

  • Menambahkan komentar untuk menjelaskan kode.
  • Dikoreksi untuk digunakan dengan sistem operasi yang lebih baru yang menggunakan IPV4 dipetakan ke IPV6 (seperti windows 10).
  • Berkurangnya sarang.
  • Upgrade kode menggunakan "var".
Jonathan Alfaro
sumber
1
Ini sangat menarik, saya akan mencobanya, karena dalam kasus saya, saya ingin klien menemukan a) alamat sumber yang digunakan untuk berkomunikasi dengan server saya (TIDAK akan selalu melalui internet) dan b) apa alamat MAC adalah dari NIC yang menyediakan alamat IP ini ...
Brian B
5

Anda bisa menggunakan ID NIC:

 foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) {
     if (nic.OperationalStatus == OperationalStatus.Up){
         if (nic.Id == "yay!")
     }
 }

Ini bukan alamat MAC, tetapi ini adalah pengidentifikasi unik, jika itu yang Anda cari.

mmr
sumber
2

Saya sangat suka solusi AVee dengan metrik koneksi IP terendah! Tetapi jika nic kedua dengan metrik yang sama diinstal, perbandingan MAC bisa gagal ...

Lebih baik Anda menyimpan deskripsi antarmuka dengan MAC. Dalam perbandingan nanti, Anda dapat mengidentifikasi nic yang tepat dengan string ini. Berikut ini contoh kode:

   public static string GetMacAndDescription()
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true");
        IEnumerable<ManagementObject> objects = searcher.Get().Cast<ManagementObject>();
        string mac = (from o in objects orderby o["IPConnectionMetric"] select o["MACAddress"].ToString()).FirstOrDefault();
        string description = (from o in objects orderby o["IPConnectionMetric"] select o["Description"].ToString()).FirstOrDefault();
        return mac + ";" + description;
    }

    public static string GetMacByDescription( string description)
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true");
        IEnumerable<ManagementObject> objects = searcher.Get().Cast<ManagementObject>();
        string mac = (from o in objects where o["Description"].ToString() == description select o["MACAddress"].ToString()).FirstOrDefault();
        return mac;
    }
Detlef
sumber
2

katakanlah saya memiliki TcpConnection menggunakan ip lokal saya 192.168.0.182. Maka jika saya ingin mengetahui alamat mac NIC itu, saya akan memanggil meothod sebagai:GetMacAddressUsedByIp("192.168.0.182")

public static string GetMacAddressUsedByIp(string ipAddress)
    {
        var ips = new List<string>();
        string output;

        try
        {
            // Start the child process.
            Process p = new Process();
            // Redirect the output stream of the child process.
            p.StartInfo.UseShellExecute = false;

            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.FileName = "ipconfig";
            p.StartInfo.Arguments = "/all";
            p.Start();
            // Do not wait for the child process to exit before
            // reading to the end of its redirected stream.
            // p.WaitForExit();
            // Read the output stream first and then wait.
            output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();

        }
        catch
        {
            return null;
        }

        // pattern to get all connections
        var pattern = @"(?xis) 
(?<Header>
     (\r|\n) [^\r]+ :  \r\n\r\n
)
(?<content>
    .+? (?= ( (\r\n\r\n)|($)) )
)";

        List<Match> matches = new List<Match>();

        foreach (Match m in Regex.Matches(output, pattern))
            matches.Add(m);

        var connection = matches.Select(m => new
        {
            containsIp = m.Value.Contains(ipAddress),
            containsPhysicalAddress = Regex.Match(m.Value, @"(?ix)Physical \s Address").Success,
            content = m.Value
        }).Where(x => x.containsIp && x.containsPhysicalAddress)
        .Select(m => Regex.Match(m.content, @"(?ix)  Physical \s address [^:]+ : \s* (?<Mac>[^\s]+)").Groups["Mac"].Value).FirstOrDefault();

        return connection;
    }
Tono Nam
sumber
Ini tidak efisien ... Saya tidak akan merekomendasikan melakukan ini.
Ivandro IG Jao
2

Benar-benar benci untuk menggali posting lama ini, tetapi saya merasa pertanyaan ini layak mendapat jawaban khusus untuk windows 8-10.

Menggunakan NetworkInformation dari namespace Windows.Networking.Connectivity , Anda bisa mendapatkan ID dari jendela adaptor jaringan yang digunakan. Kemudian Anda bisa mendapatkan antarmuka MAC Address dari GetAllNetworkInterfaces yang disebutkan sebelumnya ().

Ini tidak akan berfungsi di Windows Store Apps karena NetworkInterface di System.Net.NetworkInformation tidak memaparkan GetAllNetworkInterfaces.

string GetMacAddress()
{
    var connectionProfile = NetworkInformation.GetInternetConnectionProfile();
    if (connectionProfile == null) return "";

    var inUseId = connectionProfile.NetworkAdapter.NetworkAdapterId.ToString("B").ToUpperInvariant();
    if(string.IsNullOrWhiteSpace(inUseId)) return "";

    var mac = NetworkInterface.GetAllNetworkInterfaces()
        .Where(n => inUseId == n.Id)
        .Select(n => n.GetPhysicalAddress().GetAddressBytes().Select(b=>b.ToString("X2")))
        .Select(macBytes => string.Join(" ", macBytes))
        .FirstOrDefault();

    return mac;
}
Greg Gorman
sumber
2
string mac = "";
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
            {

                if (nic.OperationalStatus == OperationalStatus.Up && (!nic.Description.Contains("Virtual") && !nic.Description.Contains("Pseudo")))
                {
                    if (nic.GetPhysicalAddress().ToString() != "")
                    {
                        mac = nic.GetPhysicalAddress().ToString();
                    }
                }
            }
MessageBox.Show(mac);
safari hadi
sumber
2
Jawaban ini dapat ditingkatkan dengan penjelasan singkat tentang apa yang dilakukan kode dan bagaimana cara memecahkan masalah.
Greg yang Luar Biasa
1

Mengubah blak3r kodenya sedikit. Jika Anda memiliki dua adapter dengan kecepatan yang sama. Urutkan berdasarkan MAC, sehingga Anda selalu mendapatkan nilai yang sama.

public string GetMacAddress()
{
    const int MIN_MAC_ADDR_LENGTH = 12;
    string macAddress = string.Empty;
    Dictionary<string, long> macPlusSpeed = new Dictionary<string, long>();
    try
    {
        foreach(NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
        {
            System.Diagnostics.Debug.WriteLine("Found MAC Address: " + nic.GetPhysicalAddress() + " Type: " + nic.NetworkInterfaceType);

            string tempMac = nic.GetPhysicalAddress().ToString();

            if(!string.IsNullOrEmpty(tempMac) && tempMac.Length >= MIN_MAC_ADDR_LENGTH)
                macPlusSpeed.Add(tempMac, nic.Speed);
        }

        macAddress = macPlusSpeed.OrderByDescending(row => row.Value).ThenBy(row => row.Key).FirstOrDefault().Key;
    }
    catch{}

    System.Diagnostics.Debug.WriteLine("Fastest MAC address: " + macAddress);

    return macAddress;
}
pengguna369122
sumber
1
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
     if (nic.OperationalStatus == OperationalStatus.Up)
     {
            PhysicalAddress Mac = nic.GetPhysicalAddress();
     }
}
Mohamad Javadi
sumber
0

ipconfig.exediimplementasikan menggunakan berbagai DLL termasuk iphlpapi.dll... Googling untuk iphlpapimengungkapkan Win32 API terkait yang didokumentasikan dalam MSDN.

ChrisW
sumber
0

Coba ini:

    /// <summary>
    /// returns the first MAC address from where is executed 
    /// </summary>
    /// <param name="flagUpOnly">if sets returns only the nic on Up status</param>
    /// <returns></returns>
    public static string[] getOperationalMacAddresses(Boolean flagUpOnly)
    {
        string[] macAddresses = new string[NetworkInterface.GetAllNetworkInterfaces().Count()];

        int i = 0;
        foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (nic.OperationalStatus == OperationalStatus.Up || !flagUpOnly)
            {
                macAddresses[i] += ByteToHex(nic.GetPhysicalAddress().GetAddressBytes());
                //break;
                i++;
            }
        }
        return macAddresses;
    }
Richard
sumber