¿Cómo obligar a un servidor a devolver mi dirección IP en IPv4 y no en IPv6?

¿Cómo obligar a un servidor a devolver mi dirección IP en IPv4 y no en IPv6?

Guión

Tengo un pequeño script PHP en un servidor que refleja la dirección IP de cualquier cliente que lo alcance para que la dirección pueda agregarse a la tabla de hosts remotos MySQL de cpanel a través de la API. Llamo a este script usando IdHTTP1.Get() pasando la URL del script. Estoy probando esto usando Bitdefender VPN para darme una nueva dirección IP cada vez antes de ejecutar el código Delphi para obtener mi dirección IP actual. El código para el script PHP y el código de llamada de Delphi se encuentran a continuación.

Problema

Si abro la VPN para obtener una nueva dirección IP y luego ejecuto el código, devuelve una dirección IPv6. Si luego ejecuto el código nuevamente, sin desconectar la VPN, es decir, sigo teniendo la misma dirección, en la segunda llamada obtengo una dirección IPv4. Cada vez que ejecuto el código, obtengo la misma dirección IPv4, como era de esperar.

Si cierro la VPN y la abro nuevamente para obtener una dirección IP diferente, sucede lo mismo. es decir, la primera vez que ejecuto el código obtengo una dirección IPv6 y las veces posteriores obtengo una dirección IPv4.

por ejemplo, primera vez: 2a02:2498:e000:2001:8418:7195:9f43:a0f Segunda vez y siguientes: 88.202.181.53

Esta publicaciónexplica que es posible que se devuelva cualquier formato de dirección, pero el patrón que obtengo parece bastante consistente.

Pregunta

¿Hay alguna manera de forzar que el código devuelva siempre una dirección IPv4? (Sin que mi código solicite repetidamente la dirección hasta obtener una en IPv4)

información adicional

Esta publicaciónParece aludir a una solución, pero realmente no entiendo lo suficiente la respuesta aceptada como para aplicarla a mi caso.

Esta página,https://www.ipify.org/en uso de API, muestra cómo obtener mi dirección IPv4 o IPv6 usandohttps://api.ipify.orgohttps://api64.ipify.orgEntonces debería ser posible decir cuál quiero en mi guión.

código myip.php

<?php
$ip=$_SERVER['REMOTE_ADDR'];
echo $ip;
?>

La función de Delphi que llama al script PHP (IdHTTP1 es un componente de Indy TIdHTTP en el formulario)

function TFrmMain.getmyipaddress: string;
var url : string;
begin
  url :=  'https://Thedomain.com/myip.php';
  Result := '';
  try
     try
     theip :=  IdHTTP1.Get(url);    
     Result := Trim(theip);
     if result = '' then   showmessage( 'Failed to get a sensible IP address from myip.php on server:');
    finally
    end;
  except
    on E: Exception do
      ShowMessage('Failed to get IP address from myip.php on server:' +slinebreak +
      e.Message);
  end;
end;

Respuesta1

ipify.org solo puede indicarle tanto su dirección IPv4 como su dirección IPv6 porque tiene diferentes dominios para IPv6 e IPv4. El sitio web enhttps://www.ipify.org/realizará solicitudes a diferentes dominios usando javascript.

Se puede realizar una solicitud http utilizando IPv4 o IPv6 y, naturalmente, el servidor web conocerá su dirección IP de conexión a partir de los encabezados TCP; después de todo, es allí donde envía su respuesta. Depende del cliente decidir si realiza la solicitud http a través de IPv4 o IPv6, pero si el dominio solo tiene un registro A (IPv4) o AAAA (IPv6), el cliente realmente no tiene otra opción.

El nombre de dominio api6.ipify.org solo se resuelve en direcciones IPv6, api4.ipify.org solo en IPv4, por lo tanto un cliente nunca puede conectarse a api4.ipify.org a través de IPv6 y viceversa.

Si desea que su script php siempre devuelva la dirección IPv4 del cliente, asegúrese de que no pueda conectarse a través de IPv6 alojándolo en un dominio que solo pueda resolverse en una dirección IPv4.

Respuesta2

PHP $_SERVER['REMOTE_ADDR']contiene la dirección remota del socket que está abierto para realizar la solicitud. Puede ser una dirección IPv4 o IPv6, según lo que el cliente haya elegido utilizar.

Existen varios criterios para que el cliente seleccione IPv4 o IPv6 al conectarse al dominio:

  • Si el cliente no tiene una dirección IPv6 adecuada, utiliza IPv4 para comunicarse
  • Si el dominio no tiene un registro de registro AAAA en DNS, el cliente utilizará un registro A, es decir IPv4
  • Si el cliente determina que hay problemas con IPv6, recurrirá a IPv4.

Por lo tanto, si desea asegurarse de REMOTE_ADDRtener siempre una dirección IPv4, debe utilizar un nombre de dominio que solo tenga un registro A.

Si tiene control sobre la red del cliente, puede desactivar IPv6 en el cliente.

información relacionada