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
Jawaban:
Solusi bersih
Atau:
sumber
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.)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();
FirstOrDefault
sebelum finalSelect
. Dengan cara ini, itu hanya akan mendapatkan alamat fisik dan cerita bersambung untuk yang sebenarnyaNetworkInterface
Anda dapatkan. Jangan lupa untuk menambahkan cek nol (?) Setelah tandaFirstOrDefault
.NetworkInterface .GetAllNetworkInterfaces() .FirstOrDefault(nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback)? .GetPhysicalAddress().ToString();
Berikut adalah beberapa kode C # yang mengembalikan alamat MAC dari antarmuka jaringan operasional pertama. Dengan asumsi
NetworkInterface
perakitan 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.
Versi Asli: baru saja mengembalikan yang pertama.
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.
sumber
using System.Net.NetworkInformation;
The MAC address milik kelas Win32_NetworkAdapterConfiguration WMI dapat menyediakan Anda dengan alamat MAC adaptor ini. (System.Management Namespace)
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:
sumber
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:
Inilah contoh item # 3. Ini tampaknya menjadi pilihan terbaik jika WMI bukan solusi yang layak:
Untuk memberi kredit pada saat jatuh tempo, ini adalah dasar untuk kode itu: http://www.pinvoke.net/default.aspx/iphlpapi.sendarp#
sumber
Kami menggunakan WMI untuk mendapatkan alamat mac antarmuka dengan metrik terendah, mis. Jendela antarmuka akan lebih suka menggunakan, seperti ini:
Atau di Silverlight (butuh kepercayaan yang ditingkatkan):
sumber
sumber
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.
sumber
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
Untuk memanggilnya Anda harus mengirimkan URL agar terhubung seperti ini:
Anda juga dapat menentukan nomor port. Jika tidak ditentukan standarnya adalah 80.
PEMBARUAN:
2020
sumber
Anda bisa menggunakan ID NIC:
Ini bukan alamat MAC, tetapi ini adalah pengidentifikasi unik, jika itu yang Anda cari.
sumber
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:
sumber
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")
sumber
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.
sumber
sumber
Mengubah blak3r kodenya sedikit. Jika Anda memiliki dua adapter dengan kecepatan yang sama. Urutkan berdasarkan MAC, sehingga Anda selalu mendapatkan nilai yang sama.
sumber
sumber
ipconfig.exe
diimplementasikan menggunakan berbagai DLL termasukiphlpapi.dll
... Googling untukiphlpapi
mengungkapkan Win32 API terkait yang didokumentasikan dalam MSDN.sumber
Coba ini:
sumber