@Elektro tiene razón, es la mejor forma, pero... siempre hay formas y formas, a mi me gusta lo rápido. (Quizás no lo más limpio y lo mejor...)
Te tiro una idea, utiliza el netstat y ejecutalo desde un proceso.
public static void Main(string[] args)
{
Console.WriteLine("Test de Conexion.");
// ######### VARS #########
// EN MI CASO USO FIREFOX.
string navegador = "[firefox.exe]";
// MISTERIOSO DOMINIO DE GOOGLE... LULZ, USO HTTP PERO DEBERÍA USARSE HTTPS.
string servicio_web = ".1e100.net:http";
// ######### VARS #########
// CREO EL PROCESO Y LE PASO LOS ARGUMENTOS.
System.Diagnostics.Process procesoCMD = new System.Diagnostics.Process();
procesoCMD.StartInfo.FileName = "netstat.exe";
procesoCMD.StartInfo.Arguments = "-b";
procesoCMD.StartInfo.UseShellExecute = false;
procesoCMD.StartInfo.RedirectStandardOutput = true;
procesoCMD.StartInfo.RedirectStandardError = true;
procesoCMD.StartInfo.RedirectStandardInput = true;
// OBTENGO LA RESPUESTA DEL NETSTAT.
procesoCMD.Start();
procesoCMD.BeginErrorReadLine();
string respuesta = procesoCMD.StandardOutput.ReadToEnd();
procesoCMD.WaitForExit();
// COMPRUEBO SI ESTÁ EL NAVEGADOR.
if(respuesta.Contains(navegador))
{
Console.WriteLine("Hay una conexión de navegador.");
// CONFUSO, PERO SACO LÍNEAS PARA COMPROBAR SI CORRESPONDE A GOOGLE.
string[] lineas = System.Text.RegularExpressions.Regex.Split(respuesta, Environment.NewLine);
// SALTO SI YA SÉ QUE ESTÁ EN GOOGLE.
bool servicio_web_existe = false;
for (int linea = 0; linea < lineas.Length; linea++) {
// ##### POSIBLE BUG, SE COMPRUEBA SI EXISTE CONEXIÓN #####
// ##### HACIA EL DOMINIO DE GOOGLE PERO NO #####
// ##### SI EL PROCESO CORRESPONDE AL NAVEGADOR. #####
if(lineas[linea].Contains(servicio_web))
{
Console.WriteLine("¡Y está conectada a google!");
servicio_web_existe = true;
break;
}
}
// COMPRUEBO SI HUBO CONEXIÓN, EN TODO CASO REPORTO NEGATIVO
if(!servicio_web_existe)
{
Console.WriteLine("¡Pero no está conectado a google!");
}
}
else
{
Console.WriteLine("No hay conexión de navegador.");
}
// HAY QUE CUIDAR EL HEAP, MÁS CUANDO UNO NO TIENE UN SUPER PC...
procesoCMD.Dispose();
Console.ReadKey();
}
Hay que tener en cuenta que sólo ve mientras esté navegando, es decir si se cierra la conexion o hay un time-out se borra. No es lo mejor, pero es lo práctico para salir del apuro.
¡¡Suerte!!