Al intentar utilizar curl para sortear una entrada DNS mal configurada (experimentando y no conocida en ese momento), --resolve
parecí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/hosts
para 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/hosts
a algo no válido también recibe prioridad sobre los --resolve
argumentos 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 --resolve
combina 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; --resolve
necesita 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