Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Como saber si tengo LAN o WLAN

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Como saber si tengo LAN o WLAN Responder citando

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.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Re: Como saber si tengo LAN o WLAN Responder citando

JesúsGandia escribió:
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.

Yo usop conexiones wifi para utilizar un escritorio remoto. No sé con que programa está intentando acceder, pero yo uso TeamViewer con wifi sin problemas.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

JesúsGandia escribió:
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 WLAN.

...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 WLAN sin yo estar allí.
GRACIAS.

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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 [URL="http://delphiaccess.com/foros/index.php/topic/11718-jugando-con-las-conexiones-wifi/"]Jugando con las conexiones Wifi[/URL], 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. Wink

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

intento hacer esto y no compila:
Código:

   DWORD result;
            if(!::InternetGetConnectedState(&result, 0))
                throw GetLastError();
            bool conexion =  result & INTERNET_CONNECTION_LAN;


Me da error "Unresolved external 'InternetGetConnectedSate' referenced from xxx.OBJ"

y no sé como resolverlo...
Necesito ayuda... GRACIAS.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Ok, ya está, perdona...
Me faltaba linkar la librería.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Pues después de probar esto:
Código:

    DWORD result;
    InternetGetConnectedState(&result, 0);
    if(result & INTERNET_CONNECTION_LAN)
        LRed->Caption = "CABLE CONECTADO.";
    else
        LRed->Caption = "CABLE DES_CONECTADO.";
    Application->ProcessMessages();


Si tengo el CABLE DESCONECTADO, pero tengo un USB Wi-Fi conectado, me dice que la LAN está conectada.
Vamos, que no encuentro lo que yo quiero.
¿Sabeis si por el REGISTRO DE WINDOWS puedo saber si un PC utiliza Tarjeta de RED CABLEADA o por el contrario algún tipo de interfaz Wi-Fi?

Por otro lado la función WifiDisConect()
No me consigue copilar aun añadiendo (wininet.dll, wininet.lib, wlanapi.dll, wlanapi.lib)
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Gracias, ya encontré la solución.
Código:

//Función para comprobar si existe una conexión Wi-Fi
//Es necesario (#include "Wlanapi.h") y linkar la libreria Wlanapi.lib con el proyecto
void __fastcall TfrmComprobacion::EstadoWifi(void)
{
   HANDLE hClient;
     DWORD dwVersion;
   PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
    PWLAN_INTERFACE_INFO pIfInfo = NULL;
     PGUID pInterfaceGuid;
    LWiFi->Font->Color = clRed;
    LWiFi->Caption = "Desactivada y/o Desconectada";

     if(ERROR_SUCCESS == WlanOpenHandle(1, NULL, &dwVersion, &hClient))
     {
       if(ERROR_SUCCESS == WlanEnumInterfaces(hClient, NULL, &pIfList))
       {
            for(unsigned int i=0; i <pIfList>dwNumberOfItems; i++)
            {
                pInterfaceGuid = &pIfList->InterfaceInfo[pIfList->dwIndex].InterfaceGuid;
                pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
                switch(pIfInfo->isState)
                {
                    case wlan_interface_state_not_ready:
                        LWiFi->Caption = "No está listo.";
                        break;
                    case wlan_interface_state_connected:
                       LWiFi->Font->Color = clLime;
                        LWiFi->Caption = "Conectado.";
                        break;
                    case wlan_interface_state_ad_hoc_network_formed:
                        LWiFi->Caption = "Probando configuración automática.";
                        break;
                    case wlan_interface_state_disconnecting:
                        LWiFi->Caption = "Desconectando.";
                        break;
                    case wlan_interface_state_disconnected:
                        LWiFi->Caption = "Desconectado.";
                        break;
                    case wlan_interface_state_associating:
                        LWiFi->Caption = "Asociandose a la RED.";
                        break;
                    case wlan_interface_state_discovering:
                        LWiFi->Caption = "Probando configuración de RED.";
                        break;
                    case wlan_interface_state_authenticating:
                        LWiFi->Caption = "Procesando autenticación.";
                        break;
                    default:
                        LWiFi->Caption = "Estado desconocido.";
                        break;
                }
            }

            WlanFreeMemory(pIfList);
       }

      WlanCloseHandle(hClient, NULL);
   }
}

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Supongo que ya puedes compilar el código que te pasé. En caso contrario y si te interesa, esta noche cuando llegue a casa, te preparo un ejemplo que muestre si hay conexiones wifi y desactivarlas.

Si la conexión wifi te crea un conflicto deberás desactivarla. comprobar que sigues teniendo conexión a internet y darle paso a tu sistema. Lo de la conexión a internet no estoy seguro que lo precises pues no se si tu aplicación es sólo para la red local.

Tienes vario funciones de código para wifi en el enlace que te dejé.


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

GRACIAS, escafandra, tu función me sirvió de mucho, pero la modifique a mis necesidades.
Como tu bien dices podría una vez comprabado que tengo Wi-Fi descativarlo, cosa que haces con:
Código:

Result = (ERROR_SUCCESS == WlanDisconnect(hClient, pInterfaceGuid, NULL));

Lueg comprobar si tengo acceso a internet para saber si tengo conexión de RED.
Para este ultimo caso empleo la lectura de un fichero en la web por ftp, y en función de lo que tarde se si tiene cable conectado o NO.
Te muestro la función que ya esta comprobad y funciona perfectamente.
Código:

void __fastcall TfrmComprobacion::ComprobarInternet(void)
{
    IdFTP->Host = CrDat(L"ÀÒÖˆÐÏÕÓÇÊ‹ÕßÕÒÃËÕˆÃÕ");//Texto encriptado
    IdFTP->Username = CrDat(L"Ó’‘¾“——");//Texto encriptado
    IdFTP->Password = CrDat(L"–”——ìë”–––”¾¸”åÖ¸–—¾—Â");//Texto encriptado
    String UpdateLocal = fV->SV->DatSetPCRutaTPV_Ncr + CrDat(L"óÖÂÇÒÃúúÈÜÑ");//Texto encriptado
    String VersionDescarga = fV->SV->DatSetPCRutaTPV_Ncr + CrDat(L"óÖÂÇÒÃ") + L"//version_update";//Texto encriptado


    if(!DirectoryExists(fV->SV->DatSetPCRutaTPV_Ncr + CrDat(L"óÖÂÇÒÃ")))//Texto encriptado
        CreateDir(fV->SV->DatSetPCRutaTPV_Ncr + CrDat(L"óÖÂÇÒÃ"));//Texto encriptado
    // Creo variables de Proceso
    double seg;
    LARGE_INTEGER start, end, freq;
    SetThreadAffinityMask(GetCurrentThread(), 1);
    QueryPerformanceFrequency(&freq);
    // Inicio Proceso Contador
    QueryPerformanceCounter(&start);
    try
    {
        IdFTP->Connect();
        if(IdFTP->Connected())
        {
            IdFTP->ChangeDir(CrDat(L"ÈÜÑ"));//Texto encriptado
            PBConexionInternet->MaxValue = (IdFTP->Size("version_actual") + IdFTP->Size(CrDat(L"ÈÜÑ"))) / 1024;//Texto encriptado

            IdFTP->TransferType = ftASCII;
            IdFTP->Get("version_update" , VersionDescarga, true);
            IdFTP->Get(CrDat(L"ÈÜÑ") , UpdateLocal, true);//Texto encriptado
            IdFTP->Disconnect();
            IdFTP->Tag = 1;//Para saver si ha tenido exito hasta aquí
            fV->SV->AccesoInternet = 1;//Tengo conexión a Internet

            //Encripto el fichero bajado
            TStringList* cLineas = new TStringList();
         cLineas->LoadFromFile(VersionDescarga.w_str());//Cargo el contenido del fichero de versión
         fV->SV->VersionUpdate = cLineas->Strings[0];//Capturo la primera Linea del fichero

            cLineas->LoadFromFile(UpdateLocal.w_str());//Cargo el contenido del fichero con seriales problematicos
            for(int i = 0; i <cLineas>Count; i++)//Con el bucle, encripto todo el fichero
                cLineas->Strings[i] = CrDat(cLineas->Strings[i]);
            cLineas->SaveToFile(UpdateLocal.w_str());//Lo guardo encriptado en el disco Local
            delete cLineas;

         LRed->Font->Color = clLime;
            LAccesoInternet->Font->Color = clLime;
         LRed->Caption = "Conexión establecida.";
            LAccesoInternet->Caption = "Conexión establecida.";
            EstadoWifi();

            CB2->Enabled = true;
            if(LWiFi->Caption == "Conexión establecida.")
            {
               CB2->Checked = true;
                CB2->Font->Color = clRed;
            }
            else
               CB2->Checked = true;

            CB3->Enabled = true;
            CB3->Checked = true;
            CB4->Enabled = true;
            CB4->Checked = true;
            CB5->Enabled = true;
            CB5->Checked = true;
            CB6->Enabled = true;
            CB6->Checked = true;
            CB7->Enabled = true;
            CB7->Checked = true;
            CB8->Enabled = true;
            CB8->Checked = true;
            CB9->Enabled = true;
            CB9->Checked = true;
        }
    }
    catch(...)
        {
            if(!IdFTP->Tag)//Si es igual a CERO es que algo ha ido mal.
                fV->SV->AccesoInternet = 0;//Si tengo conexión a Internet

            LAccesoInternet->Font->Color = clRed;
            LAccesoInternet->Caption = "Sin Acceso a Internet";
            LWiFi->Font->Color = clRed;
            LWiFi->Caption = "Desactivada y/o Desconectada";


            QueryPerformanceCounter(&end);
            seg = (end.QuadPart-start.QuadPart)/static_cast<double>(freq.QuadPart);
            if(seg < 5)//Si tarda mas de 5 segundos no tengo tarjeta de RED o el cable está desconectado
            {
                LRed->Font->Color = clRed;
                LRed->Caption = "Desactivada y/o Desconectada";
            }
            else//Si tarda mas de 5 segundos tengo tarjeta de RED con cable conectado, pero sin Acceso a Internet
               {
                    LRed->Font->Color = TColor(33023);//Naranja
                  LRed->Caption = "Conectado a la Red sin Internet";
                    CB2->Enabled = true;
                    CB2->Checked = true;
                }
            PBConexionInternet->UserValue = PBConexionInternet->MaxValue;
        }
}

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Re: Como saber si tengo LAN o WLAN Responder citando

Angel escribió:
JesúsGandia escribió:
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.

Yo usop conexiones wifi para utilizar un escritorio remoto. No sé con que programa está intentando acceder, pero yo uso TeamViewer con wifi sin problemas.


TeamViewer no es un RDP.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Re: Como saber si tengo LAN o WLAN Responder citando

JesúsGandia escribió:
TeamViewer no es un RDP.

Ok. Cuando hablabas de escritorio remoto pensé que te referías a ese tipo de aplicaciones en general.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.