curl отдает приоритет IP-адресу, предоставленному для разрешения arg (или другому), по сравнению с другими параметрами DNS

curl отдает приоритет IP-адресу, предоставленному для разрешения arg (или другому), по сравнению с другими параметрами DNS

При попытке использовать curl для обхода неправильно настроенной записи DNS (экспериментальной и неизвестной на тот момент), --resolveказалось, что это правильный путь. Однако аргумент вел себя не так, как я ожидал, и (успешно) 404.

Редактирование системного /etc/hostsфайла для добавления правильной записи работает нормально, так что, похоже, это часть того, как curl разрешает DNS. И действительно, изменение IP на /etc/hostsчто-то недействительное также получает приоритет над --resolvearg и 404.

Можно ли заставить curl разрешить определенный IP-адрес для имени по сравнению с тем, что предоставляет система через встроенный аргумент? (и --resolveсочетается ли это с чем-то еще?)


Пример ниже: имена и адреса изменены в целях защиты виновных.

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

решение1

Я только что нашел ответ; --resolveнужно указать правильный порт (может быть несколько портов)

Кроме того, *может использоваться для хоста (но не порта!), что упрощает аргумент. Страница руководства достаточно ясно описывает все это.

% 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

Связанный контент