Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Como saber si tengo LAN o WLAN (https://www.clubdelphi.com/foros/showthread.php?t=89082)

jesusgandia1966 23-09-2015 22:03:25

Como saber si tengo LAN o WLAN
 
Estoy ya cansado de buscar y no encuentro nada.
Como puedo saber si un PC tiene conectada el CABLE RJ45 (RED) si no tiene Internet en el PC.
La cosa es que quiero detectar si a un cliente se le puede acceder por ESCRITORIO REMOTO, para lo cual se necesita la conexión cableada de RED, ya que la Wi-Fi si la tuviese no vale para la conexión.

GRACIAS DE ANTEMANO.

escafandra 23-09-2015 23:12:43

Supongo que eso lo quieres saber por código y el el PC del cliente, para ello se me ocurre que primero debes conocer si está conectado por wifi, para ello puedes seguir este hilo: Jugando con las conexiones Wifi, en caso de que tenga conexión wifi la desconectas y miras si hay conexión a internet. El problema lo puedes tener si está conectado por cable a un punto e acceso wifi, eso va a ser mucho más difícil de conocer.


Saludos.

mamcx 24-09-2015 00:31:58

Ese es un problema muy patente en móviles. Sabes cual es la solución? Si quieres saber si puedes conectarte a (por ejemplo) google.com la unica forma correcta, segura y confiable es: conectandote a google.com. En los codigos de este tipo (que se llaman "reachability") lo que se hace es que se manda una conexión minima (como un "HEAD" por http a un dominio) y si falla, se reintenta cada tanto tiempo.


En el caso que mencionas es aun mas importante aceptar que este es el unico modo correcto, seguro y confiable; ya que el hecho de que puedas conectarte a google.com no significa que puedas conectarte a la IP/dominio del cliente: Pocos clientes mantienen una presencia tan confiable como google.com ;)

jesusgandia1966 24-09-2015 22:55:23

Creo que no me he explicado bien.
Mis clientes utilizas Comanderos (Android/iPads) para conectarse al SERVIDOR por ESCRITORIO REMOTO en modo MULTI-USUARIO/MULTI-ESCRITORIO.

Este proceso solo se pude hacer a través de un P.A. o Router y los dispositivos móviles se conectar por Wi-Fi al Router/P.A y éste a de estar conectado al PC por CABLE.

Quiero que mi Software pueda detectar sin yo estar delante del PC del cliente, si este tiene la conexión de RED u Internet por LAN o por WAN.

...y no vale decir... mira si el cliente tiene Wi-Fi porque si estubiense delante del PC, entonces no haría la pregunta que hago.

Windows cuando se conecta a la RED si es LAN, en la barra de tareas pone un pequeño PC y si si se desconecta el cable de RED pone una CRUZ y si no tiene internet pone un SIMBOLO DE advertencia en amarillo.
Pero cuando se conecta por Wi-Fi pone otro SIMBOLO con rallitas de cobertura.

Pues bién, si Windows puede detectar eso, seguro que con la función adecuada yo también y eso es lo que quiero encontrar.

Saber si el cliente tiene LAN o WAN sin yo estar allí.
GRACIAS.

escafandra 25-09-2015 00:24:35

No explicaste en profundidad los motivos por los que quieres detectar una conexión por Wifi contra una LAN pero si entendí bien la pregunta.

1. La API InternetGetConnectedState te permite conocer si tienes conectado un cable de red a tu tarjeta, para ello basta que compruebes que en el Flag incluye el valor INTERNET_CONNECTION_LAN, una simple operación and binaria te lo dirá.

2. El hecho de que estés conectado o no por wifi o por cable, no te garantiza que sepas que dispones de conexión efectiva a Internet, es por eso que te dejé el enlace Saber si hay conexión de internet, donde describo una función: Webing que se conecta a una url real, como apuntaba mamcx, yo prefiero la conexión a google.com por su estabilidad, pero puede ser la misma de microsoft. Eso te garantiza que la conexión es real y funcionante. No hay ninguna API que te haga esa labor con seguridad. En ese enlace, si lo leiste, describo como usar la función a través de un proxy.

3. Pueden coexistir una LAN y una WAN, por lo que lo mejor es apagar la WAN para asegurarte que la conexión será por cable, es por eso que te dejé el enlace Jugando con las conexiones Wifi, en el muestro como escanear redes wifi, saber a las redes a las que el PC está conectado por esa vía y la intensidad de señal (las barritas que comentas) conectarte y desconectarte, si bien el código está escrito en delphi, te dejo su equivalente en C, pues intuyo que te interesa más. La función desconecta todos los interfeces wifi disponibles en el equipo:

Código:

BOOL WifiDisConect()
{
  HANDLE hClient;
  DWORD dwVersion;
  PWLAN_INTERFACE_INFO_LIST pInterfaceInfoList;
  PGUID pInterfaceGuid;

  BOOL Result = false;

  if(ERROR_SUCCESS == WlanOpenHandle(1, NULL, &dwVersion, &hClient)){
    if(ERROR_SUCCESS == WlanEnumInterfaces(hClient, NULL, &pInterfaceInfoList)){
      for(int i=0; i < pInterfaceInfoList->dwNumberOfItems; i++){
        pInterfaceGuid = &pInterfaceInfoList->InterfaceInfo[pInterfaceInfoList->dwIndex].InterfaceGuid;
        Result = (ERROR_SUCCESS == WlanDisconnect(hClient, pInterfaceGuid, NULL));
      }
      WlanFreeMemory(pInterfaceInfoList);
    }
    WlanCloseHandle(hClient, NULL);
  }
  return Result;
}

4. Si tu PC se conecta por cable a un punto de acceso wifi es posible que lo tengas más difícil.


Estoy convencido de que con la información ofrecida serás capaz de conseguir tu objetivo. ;)

Saludos.

jesusgandia1966 25-09-2015 08:52:32

gracias, con la función para saber si el cable de RED está conectado tengo suficiente ya que si el cliente tiene Internet, que compruebo anteriormente luego puedo comprobar si el CABLE está conectado y con eso me vale.
Ya que los clientes pueden ser accedidos por ESCRITORIO REMOTO aunque no tengan Internet.
Y sabiendo que los clientes que tienen USB-Wi-Fi el 95% es porque están conectados a Internet, sino, que sentido tendría tener un USB Wi-Fi.
GRACIAS, probaré la función para comprobar el cable de RED.


La franja horaria es GMT +2. Ahora son las 13:47:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi