curl prioriza la IP proporcionada para resolver arg (u otra) sobre otras opciones de DNS

curl prioriza la IP proporcionada para resolver arg (u otra) sobre otras opciones de DNS

Al intentar utilizar curl para sortear una entrada DNS mal configurada (experimentando y no conocida en ese momento), --resolveparecía el camino correcto a seguir. Sin embargo, el argumento no se comportó como esperaba y (con éxito) el 404.

Editar el archivo del sistema /etc/hostspara agregar la entrada adecuada funciona bien, por lo que parece que debe ser parte de cómo curl resuelve DNS. Y, de hecho, cambiar la IP /etc/hostsa algo no válido también recibe prioridad sobre los --resolveargumentos y 404.

¿Es posible forzar a curl a resolver una IP específica para un nombre sobre lo que proporciona el sistema a través de un argumento integrado? (¿y se --resolvecombina con algo más?)


Ejemplo a continuación; los nombres y direcciones han sido cambiados para proteger a los culpables.

% curl -L -vv --resolve "foo.example.com:80:10.14.0.1" "https://foo.example.com/path"
* Added foo.example.com:80:10.14.0.1 to DNS cache
*   Trying 10.15.0.1
* TCP_NODELAY set
* Connected to foo.example.com (10.15.0.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
 CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, unknown CA (560):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Respuesta1

Acabo de descubrir la respuesta; --resolvenecesita especificar el puerto correcto (que puede ser varios puertos)

Además, *puede usarse para el host (¡pero no para el puerto!), lo que simplifica el argumento. La página de manual es bastante clara al respecto.

% curl -L -vv --resolve "*:80:10.14.0.1" --resolve "*:443:10.14.0.1" "https://foo.example.com/path"
* Added foo.example.com:443:10.14.0.1 to DNS cache
*   Trying 10.14.0.1

información relacionada