दिलचस्प पोस्ट
एंड्रॉइड ट्यूटोरियल में अधिकांश फ़ील्ड (क्लास सदस्य) `एम` के साथ क्यों शुरू होते हैं? SimpleXML और print_r () – यह खाली क्यों है? एंड्रॉइड और सी # के बीच एन्क्रिप्शन संगत __स्ट्र__ और __repr__ का उद्देश्य क्या है? प्रतीक नहीं मिला: __PyCodecInfo_GetIncrementalDecoder एसक्यूएल सर्वर में डुप्लिकेट कुंजी अद्यतन पर MySQL के समतुल्य सिद्धांत में डिफ़ॉल्ट मान सशर्त डेटाग्रिड दृश्य स्वरूपण मैं स्थानीय होस्ट पर फेसबुक की तरह "पसंद" बटन कैसे जांचूं? नई xampp सुरक्षा अवधारणा: प्रवेश निषिद्ध त्रुटि 403 – विंडोज 7 – phpMyAdmin "टाइपिंगफ़ शून्य (* कुछ) ()" क्या मतलब है विशेषाधिकारों को ऊपर उठाने का उपयोग UseShellExecute = false के साथ काम नहीं करता है सेटिंग्स में परिभाषित मूल्य के लिए बाइंड करें एक व्यू मॉडेल के लिए कई डेटाटैम्पलेट के साथ आइटम्स कंट्रोल आर में व्हाइटस्पेस को अग्रणी और अनुगामी कैसे ट्रिम करें?

सी # में मशीन का मैक पता पाने के लिए विश्वसनीय तरीका

सी # का उपयोग कर चलने वाले ओएस की परवाह किए बिना मुझे मशीन का मैक पता प्राप्त करने का एक तरीका चाहिए। एप्लिकेशन को एक्सपी / विस्टा / विन्डि 32 और 64 बिट पर और साथ ही उन ओएस पर काम करने की आवश्यकता होगी, लेकिन किसी विदेशी भाषा के डिफ़ॉल्ट के साथ। सी # आज्ञाओं और ओएस क्वेरीज़ में से कई ओएस पर काम नहीं करते हैं कोई विचार? मैं "ipconfig / all" के आउटपुट को स्क्रैप कर रहा हूं लेकिन यह बहुत अविश्वसनीय है क्योंकि प्रत्येक मशीन पर आउटपुट स्वरूप भिन्न होता है I

धन्यवाद

Solutions Collecting From Web of "सी # में मशीन का मैक पता पाने के लिए विश्वसनीय तरीका"

क्लीनर समाधान

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

यहाँ कुछ सी # कोड है जो पहले ऑपरेटिंग नेटवर्क इंटरफेस का मैक पता देता है। NetworkInterface विधानसभा को मानते हुए दूसरे ऑपरेटिंग सिस्टम पर उपयोग किए जाने वाले रनटाइम (यानी मोनो) में कार्यान्वित किया जाता है तो यह अन्य ऑपरेटिंग सिस्टम पर काम करेगा।

नया संस्करण: एनआईसी को सबसे तेज़ गति के साथ देता है जिसमें एक मान्य मैक पता भी है।

 /// <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; } 

केवल इस बात के बारे में मुझे यह पसंद नहीं है कि अगर आपके पास एक नॉर्टेल पैकेट मिनिपोर्ट या कुछ प्रकार के वीपीएन कनेक्शन हैं, तो उसे चुना जाने की क्षमता है जहाँ तक मैं बता सकता हूं, किसी वास्तविक भौतिक डिवाइस के मैक को कुछ प्रकार के वर्चुअल नेटवर्क इंटरफेस से अलग करने का कोई रास्ता नहीं है।

Win32_NetworkAdapterConfiguration WMI क्लास की MACAddress संपत्ति आपको एक एडाप्टर के मैक पते के साथ प्रदान कर सकती है। (सिस्टम। प्रबंधन नामस्थान)

 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" 

यदि आप WMI एपीआई (विंडोज मैनेजमेंट इंस्ट्रुमेंटेशन) से परिचित नहीं हैं, तो यहां एनआईटी एप के लिए एक अच्छा सिंहावलोकन है ।

WMI .Net रनटाइम के साथ विंडोज़ के सभी संस्करणों में उपलब्ध है।

यहां एक कोड उदाहरण है:

 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()); } } 

डब्ल्यूएमआई सबसे अच्छा समाधान है यदि मशीन आप कनेक्ट हो रही है, तो यह एक विन्डोज़ मशीन है, लेकिन अगर आप लिनक्स, मैक या अन्य प्रकार के नेटवर्क एडेप्टर देख रहे हैं, तो आपको कुछ और उपयोग करने की आवश्यकता होगी। यहां कुछ विकल्प दिए गए हैं:

  1. डॉस कमांड nbtstat -a का उपयोग करें एक प्रक्रिया बनाएं, इस कमांड को कॉल करें, आउटपुट को पार्स करें।
  2. पहले आईपी को सुनिश्चित करने के लिए कि आपका एनआईसी उस आदेश की एआरपी तालिका में कैश करता है, फिर डॉस कमांड arp -a का उपयोग करें। विकल्प 1 में प्रक्रिया की तरह पार्स करें
  3. Iphlpapi.dll में sendarp के लिए एक खतरनाक अप्रबंधित कॉल का उपयोग करें

यहाँ आइटम # 3 का एक नमूना है यह सबसे अच्छा विकल्प है यदि WMI एक व्यवहार्य समाधान नहीं है:

 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); } 

क्रेडिट देने के लिए जहां यह कारण है, यह उस कोड का आधार है: http://www.pinvoke.net/default.aspx/iphlpapi.sendarp#

हम सबसे कम मीट्रिक के साथ अंतरफलक के मैक पते को प्राप्त करने के लिए WMI का उपयोग करते हैं, उदाहरण के लिए इंटरफ़ेस विंडो का प्रयोग करना पसंद करते हैं, जैसे:

 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; } 

या सिल्वरलाइट में (ऊंचा विश्वास की जरूरत है):

 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; } 

आप एनआईसी आईडी के लिए जा सकते हैं:

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

यह मैक पता नहीं है, लेकिन यह एक अनन्य पहचानकर्ता है, अगर आप यही चाहते हैं।

 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; } 

इंटरनेट से कनेक्ट होने के लिए वास्तविक एनआईसी के उपयोग के लिए मुझे मैक प्राप्त करने की आवश्यकता थी; यह निर्धारित करने के लिए कि कौन सा इंटरफ़ेस WCF मेरे क्लाइंट अनुप्रयोग में उपयोग किया गया था

मैं यहां बहुत सारे उत्तर देखता हूं, लेकिन कोई भी मेरी मदद नहीं करता उम्मीद है कि यह उत्तर किसी एक को मदद करता है।

यह समाधान एनआईसी के एमएसी को इंटरनेट से कनेक्ट करने के लिए इस्तेमाल किया जाता है।

 private static PhysicalAddress GetCurrentMAC(string allowedURL) { TcpClient client = new TcpClient(); client.Client.Connect(new IPEndPoint(Dns.GetHostAddresses(allowedURL)[0], 80)); while(!client.Connected) { Thread.Sleep(500); } IPAddress address2 = ((IPEndPoint)client.Client.LocalEndPoint).Address; client.Client.Disconnect(false); NetworkInterface[] allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); client.Close(); if(allNetworkInterfaces.Length > 0) { foreach(NetworkInterface interface2 in allNetworkInterfaces) { UnicastIPAddressInformationCollection unicastAddresses = interface2.GetIPProperties().UnicastAddresses; if((unicastAddresses != null) && (unicastAddresses.Count > 0)) { for(int i = 0; i < unicastAddresses.Count; i++) if(unicastAddresses[i].Address.Equals(address2)) return interface2.GetPhysicalAddress(); } } } return null; } 

इसे कॉल करने के लिए आपको इस तरह से कनेक्ट करने के लिए यूआरएल पास करना होगा:

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

मुझे सबसे कम आईपी कनेक्शन मीट्रिक के साथ AVee के समाधान पसंद है! लेकिन अगर एक ही मेट्रिक के साथ दूसरा निक्क इंस्टॉल किया गया है, तो मैक की तुलना विफल हो सकती है …

बेहतर है कि आप मैक के साथ इंटरफेस का विवरण संग्रहीत करते हैं। बाद में तुलना में आप इस स्ट्रिंग द्वारा सही एनआईसी की पहचान कर सकते हैं। यहां एक नमूना कोड है:

  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; } 

मान लें कि मेरे पास 192.168.0.182 की स्थानीय आईपी का उपयोग करते हुए एक टीसीपी कनेक्शन है। तो अगर मैं उस एनआईसी के मैक पते को जानना चाहता हूं तो मैं मेओथोड को फोन करूँगा: 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; } 

वास्तव में इस पुरानी पोस्ट को खोदने के लिए नफरत है, लेकिन मुझे लगता है कि प्रश्न विंडोज 8 8 के लिए विशिष्ट उत्तर देने योग्य है।

Windows.Networking.Connectivity नामस्थान से NetworkInformation का उपयोग करते हुए , आप नेटवर्क एडाप्टर विंडो का आईडी का उपयोग कर सकते हैं। तो आप पहले उल्लेखित GetAllNetworkInterfaces () से इंटरफ़ेस मैक पता प्राप्त कर सकते हैं

यह विंडोज स्टोर ऐप में काम नहीं करेगा क्योंकि Network.Net.NetworkInformation में NetworkInterface GetAllNetworkInterface को बेनकाब नहीं करता है।

 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; } 

ipconfig.exe को iphlpapi.dll सहित विभिन्न DLLs का उपयोग कर कार्यान्वित किया जाता है … iphlpapi लिए Googling एक संबंधित Win32 एपीआई का पता चलता है जो MSDN में दर्ज़ है।

इसे इस्तेमाल करे:

  /// <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; } 

बदल गया blak3r उसका कोड थोडा यदि आपके पास एक ही गति के साथ दो एडेप्टर हैं मैक द्वारा सॉर्ट करें, इसलिए आपको हमेशा एक ही मान मिलता है।

 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; }