2010-04-20 16 views
6

¿Hay alguna manera con Windows api para detectar si la conexión de red de una computadora con Windows 7 es una conexión a Internet o una conexión LAN sin acceso a Internet? Windows 7 y Vista indican esto en el ícono de red (Local solamente v. Local e Internet), ¿hay alguna manera de captar esa información de forma programática?Detectar Internet V. conexión LAN local

Respuesta

0

No perfectamente.

Se puede detectar si usted está en un lan de la dirección IP (asumiendo que su DHCP local entregó uno de los 192.168.xx.xx direcciones privadas.)

usted podría hacer ping a un sitio externo conocido para comprobar si ese lan tiene una conexión a internet.

+0

Sólo porque la computadora tiene una privat La dirección IP (que también incluye 10.x.x.x y 172.16-31.x.x) no significa que no esté conectada a Internet. ¡Como cualquier persona que acceda a este sitio desde detrás de un enrutador doméstico que realiza NAT puede dar fe! –

+0

No estaba claro qué hacía el OP, es decir. conexión a internet directa contra NAT –

1

Hacer ping 4.2.2.2 es un medio común para determinar si hay conectividad a Internet.

La historia detrás de esto lies here.

+0

Interesante. ¿Qué es vnsc-bak.sys.gtei.net? – sbi

+2

Aunque ahora 8.8.8.8 es probablemente mejor (he aquí el poder de Google) –

+0

@Martin: Sí, aunque 4.2.2.2 ahora es memoria muscular para mí. No sé si puedo soportar aprender 8.8.8.8 y su ángulo incómodo entre el índice y el dedo medio. –

0

Windows 7 realiza una consulta DNS para dns.msftncsi.com 5 segundos después del establecimiento del enlace. No veo ninguna razón para hacerlo, excepto para verificar la conexión a Internet.

0

El Código Pack de Windows API va a hacer esto para usted http://archive.msdn.microsoft.com/WindowsAPICodePack

su clase NetworkListManager tiene una propiedad isConnected que indica si tiene conexión LAN

y una propiedad IsConnectedToInternet que indica si tiene conexión a Internet

la descarga del paquete contiene una aplicación de demostración de red que demuestra esto

+0

la pregunta está etiquetada C++ que significa código nativo. El paquete de código (que me encanta y soy parcialmente responsable) es código administrado, por ejemplo, C# –

Cuestiones relacionadas