Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

check whether Internet connection is available with C#

Tags:

c#

windows-7

People also ask

How do I know if my Internet connection is available?

The getActiveNetworkInfo() method of ConnectivityManager returns a NetworkInfo instance representing the first connected network interface it can find or null if none of the interfaces are connected. Checking if this method returns null should be enough to tell if an internet connection is available or not.


Here is the Windows API you can call into. It's in wininet.dll and called InternetGetConnectedState.

using System;
using System.Runtime;
using System.Runtime.InteropServices;

public class InternetCS
{
    //Creating the extern function...
    [DllImport("wininet.dll")]
    private extern static bool InternetGetConnectedState( out int Description, int ReservedValue );

    //Creating a function that uses the API function...
    public static bool IsConnectedToInternet( )
    {
        int Desc ;
        return InternetGetConnectedState( out Desc, 0 ) ;
    }
}

Microsoft windows vista and 7 use NCSI (Network Connectivity Status Indicator) technic:

NCSI performs a DNS lookup on www.msftncsi.com, then requests http://www.msftncsi.com/ncsi.txt. This file is a plain-text file and contains only the text 'Microsoft NCSI'. NCSI sends a DNS lookup request for dns.msftncsi.com. This DNS address should resolve to 131.107.255.255. If the address does not match, then it is assumed that the internet connection is not functioning correctly.


here is the best solution I found so far:

public static bool isConnected()
    {
        try
        {
            string myAddress = "www.google.com";
            IPAddress[] addresslist = Dns.GetHostAddresses(myAddress);

            if (addresslist[0].ToString().Length > 6)
            {
                return true;
            }
            else
                return false;

        }
        catch
        {
            return false;
        }

    }

usage:

if(isConnected())
{
    //im connected to the internet
}
else
{
    //not connected
}

You can check for a network connection using this in .NET 2.0+

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();

This will probably just return true for local networks, so it may not work for you.


This is a question where the answer really is "it depends". Because it depends on why you want to check and for what kind of connectivity? Do you want to be able to access certain websites/services over http? Send smtp mail? Do dns lookups?

Using a combination of the previous answers is probably the way to go - first use the wininet api from colithium's answer to check if a connection of any kind is available.

If it is, try a couple of dns lookups (see System.Net.Dns ) for either the resources you're interested in or some popular big websites (google, altavista, compuserve, etc...).

Next, you can try pinging (see Roger Willcocks' answer) and/or establishing a socket connection to the same sites. Note that a failed ping could just mean that firewall rules don't allow you to ping.

If you can be more specific as to why you want to check it will be easier to provide an answer that covers your requirements...


Easiest way is to probably check if they can download a file from the web that you know is available. Use the following code to download google's homepage.

WebClient Client = new WebClient ();
String Response;
Response = Client.DownloadString("http://www.google.com");

You should probably wrap that in a Try .... Catch to catch the exception that is thrown when it can't establish a connection.