web-dev-qa-db-ja.com

curl --resolveオプションが機能しない:「ホスト名がDNSキャッシュに見つかりませんでした」

HTTP要求を実行するときにcurlの--resolveオプションを使用して指定されたIPアドレスに接続しようとしていますが、curlはローカルDNSキャッシュ/リゾルバーによって取得されたIPアドレスに戻り続けます。

コマンド:

curl -s -S -I -H "Host: example.com" --resolve example.com:80:1.1.1.1 --verbose http://example.com/

example.comは私のドメイン名に置き換えられ、1.1.1.1は目的の宛先IPアドレスに置き換えられます)

結果:

* Added example.com:80:1.1.1.1 to DNS cache
* Hostname was NOT found in DNS cache
*   Trying 2.2.2.2...
* Connected to example.com (2.2.2.2) port 80 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.35.0
> Accept: */*
> Host: example.com

2.2.2.2は、ドメイン名のローカルDNSリゾルバーにキャッシュされたIPアドレスに置き換えられます)

したがって、curlは1.1.1.1のDNSキャッシュにexample.comを追加しようとしますが、何らかの理由で失敗し、元のIPアドレスに戻ります。

この問題を解決する方法や、さらにトラブルシューティングして、なぜ機能しないのかを調べる方法についてのアイデアはありますか?

4
iglvzx

他のドメイン名でこれを試してみたところ、ドメイン名が--resolveオプションとURLで一致していないことが原因であることがわかりました(一方はwwwでしたが、他方は一致しませんでした)。ユーザーエラー!

間違った:

curl -s -S -I -H "Host: example.com" --resolve example.com:80:1.1.1.1 --verbose http://www.example.com/

正しい:

curl -s -S -I -H "Host: example.com" --resolve example.com:80:1.1.1.1 --verbose http://example.com/
3
iglvzx