curl prioriza o IP fornecido para resolver arg (ou outro) em relação a outras opções de DNS

curl prioriza o IP fornecido para resolver arg (ou outro) em relação a outras opções de DNS

Ao tentar usar curl para contornar uma entrada DNS mal configurada (experimentando e desconhecida no momento), --resolveparecia o caminho certo a seguir. No entanto, o argumento não se comportou da maneira que eu esperava e (com sucesso) do 404.

Editar o arquivo do sistema /etc/hostspara adicionar a entrada adequada funciona bem, então parece que deve fazer parte de como o curl resolve o DNS. E, de fato, alterar o IP /etc/hostspara algo inválido também recebe prioridade sobre --resolveargumentos e 404s.

É possível forçar o curl a resolver um IP específico para um nome sobre qualquer coisa que o sistema forneça por meio de um argumento interno? (e é --resolvecombinado com outra coisa?)


Exemplo abaixo; os nomes e endereços foram alterados para proteger os culpados.

% 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.

Responder1

Acabei de descobrir a resposta; --resolveprecisa especificar a porta correta (que pode ser várias portas)

Além disso, *pode ser usado para o host (mas não para a porta!), o que simplifica o argumento. A página de manual é bastante clara sobre tudo.

% 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

informação relacionada