Home > Software design >  Xamarin forms GET DNS server from WIFI connection
Xamarin forms GET DNS server from WIFI connection

Time:05-03

I am using xamarin forms and i have one problem,

i am trying to get the DNS server Adresse from WIFI, and a im using below code :

NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface networkInterface in networkInterfaces)
            {
                if (networkInterface.OperationalStatus == OperationalStatus.Up)
                {
                    IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();
                    IPAddressCollection dnsAddresses = ipProperties.DnsAddresses;

                    foreach (IPAddress dnsAdress in dnsAddresses)
                    {
                        Debug.WriteLine(dnsAdress);
                    }
                }
            }

The problem is when i use this code on Microsoft Emulator "UWP" everything work fine see picture bellow using UWP device

but nothing work when i use my android mobile see picture bellow using android device

NB: all devices are connect on the same wifi

CodePudding user response:

I had done a simple to test your code and got the same null. And then I read the IPInterfaceProperties.DnsAddresses Property document, it seems that it doesn't support the xamarin.android.

You can check the it:https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.ipinterfaceproperties.dnsaddresses?view=net-6.0

In addition, I also search this but can not find any solution. So I try to use the android native method to get the dns address with the following code. So you can try to use the dependency service to get the dns address for android.

            ConnectivityManager cm = (ConnectivityManager)GetSystemService(ConnectivityService);
            //NetworkInfo has been deprecated, but I can not find the new api to to this
            NetworkInfo activeNetworkInfo = cm.ActiveNetworkInfo;
            foreach (Network network in cm.GetAllNetworks())
            {
                NetworkInfo networkInfo = cm.GetNetworkInfo(network);
                if (networkInfo.GetType() == activeNetworkInfo.GetType())
                {
                    LinkProperties lp = cm.GetLinkProperties(network);
                    foreach (InetAddress addr in lp.DnsServers)
                    {
                        var a = addr.GetAddress();
                    }
                }
            }
  • Related