private static void InitAccessPoint() { AdapterInfo adapter = null; try { if (SecretManager.AccessPointSsid == Common.Helpers.SharedConstants.DEFAULT_AP_SSID) { var listAdapters = AdaptersHelper.GetAdapters(); adapter = listAdapters.FindAll(p => p.Type == AdapterType.Wifi).OrderBy(p => p.Name).FirstOrDefault(); if (adapter == null) { adapter = listAdapters.OrderBy(p => p.Name).FirstOrDefault(); } if (adapter == null) { throw new Exception("Could not retrieve MAC address"); } SecretManager.AccessPointSsid = $"{Common.Helpers.SharedConstants.DEFAULT_AP_SSID}_{adapter.RawMAC}"; } } catch (Exception e) { DebugHelper.LogError($"Could not retrieve MAC address: {e.Message}"); return; } DebugHelper.LogInformation($"Access Point Id: {SecretManager.AccessPointSsid}"); if (_AccessPoint != null) { StopAccessPoint(); } _AccessPoint = new OnboardingAccessPoint(SecretManager.AccessPointSsid, SecretManager.AccessPointPassword, AccessPointId); }
public static List <AdapterInfo> GetAdapters() { var adapters = new List <AdapterInfo>(); long structSize = Marshal.SizeOf(typeof(IP_ADAPTER_INFO)); IntPtr pArray = Marshal.AllocHGlobal(new IntPtr(structSize)); int ret = GetAdaptersInfo(pArray, ref structSize); if (ret == ERROR_BUFFER_OVERFLOW) // ERROR_BUFFER_OVERFLOW == 111 { // Buffer was too small, reallocate the correct size for the buffer. pArray = Marshal.ReAllocHGlobal(pArray, new IntPtr(structSize)); ret = GetAdaptersInfo(pArray, ref structSize); } if (ret == 0) { // Call Succeeded IntPtr pEntry = pArray; do { var adapter = new AdapterInfo(); // Retrieve the adapter info from the memory address var entry = (IP_ADAPTER_INFO)Marshal.PtrToStructure(pEntry, typeof(IP_ADAPTER_INFO)); // Adapter Type switch (entry.Type) { case MIB_IF_TYPE_ETHERNET: adapter.Type = AdapterType.Ethernet; break; case MIB_IF_TYPE_TOKENRING: adapter.Type = AdapterType.TokenRing; break; case MIB_IF_TYPE_FDDI: adapter.Type = AdapterType.FDDI; break; case MIB_IF_TYPE_PPP: adapter.Type = AdapterType.PPP; break; case MIB_IF_TYPE_LOOPBACK: adapter.Type = AdapterType.Loopback; break; case MIB_IF_TYPE_SLIP: adapter.Type = AdapterType.Slip; break; case MIB_IF_TYPE_WIFI: adapter.Type = AdapterType.Wifi; break; default: adapter.Type = AdapterType.Unknown; break; } // switch adapter.Name = entry.AdapterName; adapter.Description = entry.AdapterDescription; // MAC Address (data is in a byte[]) adapter.MAC = string.Join("-", Enumerable.Range(0, (int)entry.AddressLength).Select(s => string.Format("{0:X2}", entry.Address[s]))); adapter.RawMAC = string.Join("", Enumerable.Range(0, (int)entry.AddressLength).Select(s => string.Format("{0:X2}", entry.Address[s]))); // Get next adapter (if any) adapters.Add(adapter); pEntry = entry.Next; }while (pEntry != IntPtr.Zero); Marshal.FreeHGlobal(pArray); } else { Marshal.FreeHGlobal(pArray); throw new InvalidOperationException("GetAdaptersInfo failed: " + ret); } return(adapters); }