Hmmm, a ver, creo que tu lo que estás intentando hacer es que desde un programa se pueda controlar si hay conexión a internet o no, ¿¿correcto??.
Si es así lo vas a tener un poco dificil, "Internet" no es algo que puedas poner y quitar, internet llega a cada máquina de una forma:un adaptador de red, un adaptador de telefonía, un puerto COM..
Para poder controlar todo esto lo tienes un poco dificil ya que cada Hardware trabaja de una forma.
Puedes recurrir a soluciones que envuelvan las capas de red, quizá bloqueando el protocolo IPv4 y el IPv6 puedas controlar el flujo de paquetes, pero dudo mucho que lo puedas hacer en .net, para esto lo más normal sería escribir un filtro intermedio que viene a ser un driver que se coloca entre los adaptadores de red y las capas de protocolos; el problema es que es muy dificil y has de hacerlo en C puro y usando el SDK de Windows.
Otra solución posible es acceder al IPSEC si la plataforma a la que está orientada la aplicación lo soporta y crear un par de reglas que bloqueen por completo la conexión a internet, el único problema que tienes con este método es que el usuario podría acceder manualmente a esa configuración, por lo cual tendrías que estár comprobando cada poco tiempo si esa regla aún existe. Lo bueno de este sistema es que sí podrías hacerlo en .net, realizando llamadas al api de WFP (mas info
aquí).
Una última forma que se me ocurre de hacer esto es utilizar la librería IPHelper para controlar las conexiones TCP de la máquina; mediante estas funciones puedes enumerar las conexiones TCP de la máquina y cerrarlas cuando se produzcan, el único problema que tiene esto es que si se intenta usar internet por otro protocolo que no sea TCP se podría realizar la conexión. Si quieres saber más sobre IPHelper mira
aquí.
Un saludo.
El Dr. Gusman.