Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-01-2020
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 291
Poder: 21
elrayo76 Va por buen camino
Como saber si una URL está en servidor con IPv6

Buenas,


En esta ocación lo que necesito es de alguna manera poder hacer un ping ya sea con o sin Proxy. Para ello se que atravez de un proxy uno tiene que autenticarse. Además me interesaría que pueda funcionar tanto para servidores que tienen IPv4 o IPv6


He visto en estos y otros foros algunas funciones pero no se si la verdad funcionan con IPv6, no tuve oportunidad de poder probarlas. Como comentario puedo agregar por investigación que para las direcciones de IPv6 a la dirección se le debe agregar [] para que las reconozca como tal (RFC 2732).


Si el tema es como comente antes agregar esos corchetes como es que hacen los navegadores para identificar las direcciones sin que el usuario los ingrese?.


Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #2  
Antiguo 25-01-2020
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 291
Poder: 21
elrayo76 Va por buen camino
Como veo que nadie tiene una respuesta les paso algo mas de info a ver si se aclara lo que necesito.


El tema es que tengo una función como la que pongo y que fue tomada de otro foro.



Código Delphi [-]
function AuthenticateProxy(aURL: PChar; const aUserName, aPassword: String): Boolean;
var
  poiInternetOpen: HINTERNET;
  poiInternetConnect: HINTERNET;
  poiInternetRequest: HINTERNET;
  recUrlComponents: URL_COMPONENTS;
  dwdStatus: DWORD;
  dwdStatusSize: DWORD;
  i: DWORD;

begin
  Result := False;
  dwdStatusSize := SizeOf(dwdStatus);

  // Con esto se puede usar una dirección o una IP para llegar al destino.
  ZeroMemory(@recUrlComponents, SizeOf(URL_COMPONENTS));
  recUrlComponents.dwStructSize := SizeOf(URL_COMPONENTS);
  recUrlComponents.dwHostNameLength := INTERNET_MAX_HOST_NAME_LENGTH;

  // Descompone una URL en las partes que la componen.
  // Más información ver: https://docs.microsoft.com/en-us/win...ernetcrackurla
  InternetCrackUrl(aURL, Length(aURL) + 1, 0, recUrlComponents);
  // Inicializa el uso de una aplicación de las funciones WinInet.
  // Más información ver: https://docs.microsoft.com/en-us/win...-internetopena
  poiInternetOpen := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  // Abre una sesión del File Transfer Protocol (FTP) o HTTP.
  // Más información ver: https://docs.microsoft.com/en-us/win...ternetconnecta
  poiInternetConnect := InternetConnect(poiInternetOpen, recUrlComponents.lpszHostName, INTERNET_INVALID_PORT_NUMBER,
    nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
  // Crea el request de HTTP.
  // Más información ver: https://docs.microsoft.com/en-us/win...tpopenrequesta
  poiInternetRequest := HttpOpenRequest(poiInternetConnect, 'GET', recUrlComponents.lpszHostName, nil, nil, nil, INTERNET_FLAG_KEEP_CONNECTION, 0);

  for i := 0 to 1 do
  begin
      // Envia el request específico al servidor HTTP
      // Más información ver: https://docs.microsoft.com/en-us/win...tpsendrequesta
      HttpSendRequest(poiInternetRequest, nil, 0, nil, 0);
      // Recibe la información del encabezado (header) asociado con el request HTTP.
      // Más información ver: https://docs.microsoft.com/en-us/win...httpqueryinfoa
      HttpQueryInfo(poiInternetRequest, HTTP_QUERY_FLAG_NUMBER or HTTP_QUERY_STATUS_CODE, @dwdStatus, dwdStatusSize, PCardinal(0)^);

      // Se requiere autentificación en el Proxy o en el servidor
      if (dwdStatus = HTTP_STATUS_PROXY_AUTH_REQ) or (dwdStatus = HTTP_STATUS_DENIED) then
      begin
        // Setea las opciones de Internet.
        // Más información ver: https://docs.microsoft.com/en-us/win...rnetsetoptiona

        // Introducimos UserName.
        InternetSetOption(poiInternetRequest, INTERNET_OPTION_PROXY_USERNAME, PChar(aUserName), Length(aUserName) + 1);
        // Introducimos el Password.
        InternetSetOption(poiInternetRequest, INTERNET_OPTION_PROXY_PASSWORD, PChar(aPassWord), Length(aPassWord) + 1);
      end;
  end;

  InternetCloseHandle(poiInternetOpen);
  InternetCloseHandle(poiInternetConnect);
  InternetCloseHandle(poiInternetRequest);

  Result := (dwdStatus <> HTTP_STATUS_PROXY_AUTH_REQ) and (dwdStatus <> HTTP_STATUS_DENIED);
end;


Esto lo que hace es autenticar una URL pasando por el proxy. Con esto también podríamos decir que sabemos si se tiene conexión a internet si es que no se puede llegar a la URL.


El caso es que no se como hacer lo mismo pero para direcciones que están en servidores con IPv6. Todo esto por lo expuesto en mi primer mensajes.


Lo único que se me ocurrió es cuando la función toma la URL que se le agregue los corchetes y validar por IPv6, si todo sale bien es que hay internet contra el servidor ese, en caso de error validar por IPv4. Pero mi pregunta es la siguiente, ¿esta función funciona con IPv6?


¿Los navegadores cuando uno ingresa la URL y la tienen que mostrar primero agregan los corchetes para ver si existe en un servidor IPv6 para luego según el resultado salir a buscar en un servidor de IPv4?



Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo saber si un .OCX está instalado luisdevis API de Windows 2 22-09-2018 10:28:14
¿Cómo saber si una dll está registrada? jplj API de Windows 1 04-02-2010 23:28:41
Cómo saber si una instrucción sql esta activa en un servidor de interbase? fredycc Firebird e Interbase 1 09-02-2009 10:10:01
Como saber si mi servidor de MySQL esta activo o corriendo. rgstuamigo MySQL 5 19-11-2008 22:54:01
Saber si un registro está bloqueado en el servidor Muten Firebird e Interbase 1 14-10-2003 14:50:55


La franja horaria es GMT +2. Ahora son las 19:18:44.


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
Copyright 1996-2007 Club Delphi