public static IList <IP_ADAPTER_ADDRESSES> GetIPAdapters(FAMILY family) { List <IP_ADAPTER_ADDRESSES> adapters = new List <IP_ADAPTER_ADDRESSES>(); uint outBufLen = 0; ERROR err = GetAdaptersAddresses((uint)family, (uint)0, IntPtr.Zero, IntPtr.Zero, ref outBufLen); if (ERROR.ERROR_BUFFER_OVERFLOW == err) { IntPtr pAdapterAddresses = Marshal.AllocHGlobal((int)outBufLen); try { err = GetAdaptersAddresses((uint)FAMILY.AF_INET, (uint)0, IntPtr.Zero, pAdapterAddresses, ref outBufLen); if (ERROR.ERROR_SUCCESS == err) { IntPtr currPtr = pAdapterAddresses; while (IntPtr.Zero != currPtr) { IP_ADAPTER_ADDRESSES addr = (IP_ADAPTER_ADDRESSES)Marshal.PtrToStructure(currPtr, typeof(IP_ADAPTER_ADDRESSES)); adapters.Add(addr); currPtr = addr.Next; } } } finally { Marshal.FreeHGlobal(pAdapterAddresses); } } return(adapters); }
public static IList <IP_ADAPTER_ADDRESSES> GetIPAdapters(FAMILY family) { List <IP_ADAPTER_ADDRESSES> adapters = new List <IP_ADAPTER_ADDRESSES>(); uint outBufLen = 1500; uint MAX_TRIES = 3; uint iterations = 0; uint Flags = (uint)FLAGS.GAA_FLAG_INCLUDE_PREFIX; ERROR err; do { IntPtr pAdapterAddresses = Marshal.AllocHGlobal((int)outBufLen); err = GetAdaptersAddresses((uint)FAMILY.AF_INET, Flags, IntPtr.Zero, pAdapterAddresses, ref outBufLen); if (err == ERROR.ERROR_BUFFER_OVERFLOW) { Marshal.FreeHGlobal(pAdapterAddresses); } else { IntPtr currPtr = pAdapterAddresses; while (IntPtr.Zero != currPtr) { IP_ADAPTER_ADDRESSES addr = (IP_ADAPTER_ADDRESSES)Marshal.PtrToStructure(currPtr, typeof(IP_ADAPTER_ADDRESSES)); adapters.Add(addr); currPtr = addr.Next; } } iterations++; }while ((err == ERROR.ERROR_BUFFER_OVERFLOW) && (iterations < MAX_TRIES)); return(adapters); }
public static IList <AdapterInfo> getIPAddresses() { var adapters = new List <AdapterInfo>(); uint outBufLen = 0; ERROR err = (ERROR)Sockets.SocketsApi.GetAdapterAddresses(AddressFamily.InterNetwork, (uint)0, IntPtr.Zero, ref outBufLen); if (ERROR.ERROR_BUFFER_OVERFLOW == err) { byte[] buffer = new byte[outBufLen]; var bufferHandle = Microsoft.Phone.InteropServices.GCHandle.Alloc(buffer, GCHandleType.Pinned); IntPtr pAdapterAddresses = bufferHandle.AddrOfPinnedObject(); try { err = (ERROR)Sockets.SocketsApi.GetAdapterAddresses(AddressFamily.InterNetwork, (uint)0, pAdapterAddresses, ref outBufLen); if (ERROR.ERROR_SUCCESS == err) { IntPtr currPtr = pAdapterAddresses; while (IntPtr.Zero != currPtr) { IP_ADAPTER_ADDRESSES addr = (IP_ADAPTER_ADDRESSES)Microsoft.Phone.InteropServices.Marshal.PtrToStructure(currPtr, typeof(IP_ADAPTER_ADDRESSES)); AdapterInfo ainfo = new AdapterInfo(); ainfo.FriendlyName = addr.FriendlyName; ainfo.Description = addr.Description; if (IntPtr.Zero != addr.FirstUnicastAddress) { IP_ADAPTER_UNICAST_ADDRESS unicastAddr = (IP_ADAPTER_UNICAST_ADDRESS)Microsoft.Phone.InteropServices.Marshal.PtrToStructure(addr.FirstUnicastAddress, typeof(IP_ADAPTER_UNICAST_ADDRESS)); if (IntPtr.Zero != unicastAddr.Address.lpSockAddr) { // TODO check ipv4 and ipv6 SOCKADDR socketAddr = (SOCKADDR)Microsoft.Phone.InteropServices.Marshal.PtrToStructure(unicastAddr.Address.lpSockAddr, typeof(SOCKADDR)); byte[] saData = socketAddr.sa_data; // skip take IPAddress ipAddr = new IPAddress(GetBytes(saData)); ainfo.Address = ipAddr; } } adapters.Add(ainfo); currPtr = addr.Next; } } } finally { bufferHandle.Free(); } } return(adapters); }
public void Setup() { primaryAdapter = GetAdaptersAddresses(GetAdaptersAddressesFlags.GAA_FLAG_INCLUDE_GATEWAYS).FirstOrDefault(r => r.OperStatus == IF_OPER_STATUS.IfOperStatusUp && r.TunnelType == TUNNEL_TYPE.TUNNEL_TYPE_NONE && r.FirstGatewayAddress != IntPtr.Zero); }
private void AssignNewNativeObject(IP_ADAPTER_ADDRESSES nativeObject, bool noCreateIcon = false) { // Store the native object. Source = nativeObject; if (!noCreateIcon) { // First thing's first... let's get the icon for the object from its parsing name. // Which is magically the parsing name of the network device list and the adapter's GUID name. string s = @"::{7007ACC7-3202-11D1-AAD2-00805FC1270E}\" + AdapterName; var mm = new MemPtr(); NativeShell.SHParseDisplayName(s, IntPtr.Zero, out mm.handle, 0, out _); if (mm.Handle != IntPtr.Zero) { // Get a WPFImage // string library = @"%systemroot%\system32\shell32.dll" if (OperStatus == IF_OPER_STATUS.IfOperStatusUp) { //if (HasInternet == InternetStatus.HasInternet) //{ // var icn = Resources.LoadLibraryIcon(Environment.ExpandEnvironmentVariables(@"%systemroot%\system32\netcenter.dll") + ",2", StandardIcons.Icon16); // var icn2 = Resources.GetItemIcon(mm, Resources.SystemIconSizes.ExtraLarge); // var bmp = new System.Drawing.Bitmap(icn2.Width, icn2.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); // var g = System.Drawing.Graphics.FromImage(bmp); // g.DrawIcon(icn2, 0, 0); // g.DrawIcon(icn, 0, icn2.Height - 16); // g.Dispose(); // _Icon = Resources.MakeWPFImage(bmp); // bmp.Dispose(); // icn.Dispose(); // icn2.Dispose(); //} //else //{ _Icon = Resources.MakeWPFImage(Resources.GetItemIcon(mm, Resources.SystemIconSizes.ExtraLarge)); //} } else { _Icon = Resources.MakeWPFImage((System.Drawing.Bitmap)Resources.GrayIcon(Resources.GetItemIcon(mm, Resources.SystemIconSizes.ExtraLarge))); } mm.Free(); _canShowNet = true; } else { _canShowNet = false; } } OnPropertyChanged(nameof(ReceiveLinkSpeed)); OnPropertyChanged(nameof(TransmitLinkSpeed)); OnPropertyChanged(nameof(OperStatus)); foreach (var pr in allProps) { if (pr.Name.Contains("Address")) { OnPropertyChanged(pr.Name); } } }
// This class should not be created outside of the context of AdaptersCollection. internal NetworkAdapter(IP_ADAPTER_ADDRESSES nativeObject) { AssignNewNativeObject(nativeObject); }