curl priorisiert die zur Auflösung von arg (oder einem anderen) bereitgestellte IP gegenüber anderen DNS-Optionen

curl priorisiert die zur Auflösung von arg (oder einem anderen) bereitgestellte IP gegenüber anderen DNS-Optionen

Beim Versuch, mit curl einen falsch konfigurierten DNS-Eintrag zu umgehen (experimentell und zu diesem Zeitpunkt noch nicht bekannt), --resolveschien dies der richtige Weg zu sein. Das Argument verhielt sich jedoch nicht wie erwartet und führte (erfolgreich) zu 404-Fehlern.

Das Bearbeiten der Systemdatei /etc/hostszum Hinzufügen des richtigen Eintrags funktioniert einwandfrei. Es scheint also, als ob dies Teil der DNS-Auflösung durch curl ist. Und tatsächlich /etc/hostshat auch das Ändern der IP in etwas Ungültiges Vorrang vor den --resolveArgumenten und 404-Fehlern.

Ist es möglich, Curl zu zwingen, eine bestimmte IP für einen Namen aufzulösen, und zwar über das, was das System über ein integriertes Argument bereitstellt? (Und ist dies --resolvemit etwas anderem kombiniert?)


Beispiel unten; die Namen und Adressen wurden geändert, um die Schuldigen zu schützen.

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

Antwort1

Ich habe gerade die Antwort entdeckt; --resolvemuss den richtigen Port angeben (das können mehrere Ports sein)

Darüber hinaus *kann für den Host verwendet werden (aber nicht für den Port!), was das Argument vereinfacht. Die Manpage ist diesbezüglich ziemlich eindeutig.

% 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

verwandte Informationen