Example #1
0
        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);
        }
Example #2
0
    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);
    }
Example #3
0
        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);
        }
Example #4
0
 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);
 }
Example #5
0
        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);
                }
            }
        }
Example #6
0
 // This class should not be created outside of the context of AdaptersCollection.
 internal NetworkAdapter(IP_ADAPTER_ADDRESSES nativeObject)
 {
     AssignNewNativeObject(nativeObject);
 }