curl 的 --resolve 和 --connect-to 怎么选?
curl 的 --resolve 和 --connect-to 都能改变连接目标,但用途不同。前者像为“主机+端口”临时指定解析结果,后者把一个目标连接重定向到另一个“主机+端口”。做机场或 CDN 路径测试时混用,容易得到无法解释的结果。
--resolve:固定某个域名的地址
--resolve example.com:443:203.0.113.10 告诉 curl:访问 example.com:443 时使用给定地址。URL 中的域名仍然是 example.com,因此 HTTPS 的 SNI、证书主机名和 HTTP Host 会继续对应原域名。
它适合比较“正常 DNS 结果”和“固定某个已知地址”的差异。测试时必须保留证书验证,且只使用你有理由连接的地址。若固定地址不服务该域名,证书或 HTTP 响应失败是有价值的结果,不应绕过。
--connect-to:改写实际连接的主机和端口
curl 官方手册说明,--connect-to 只改变建立网络连接的位置,不改变用于 TLS/SNI、证书验证和应用协议的原始主机名。例如可以让 example.com:443 实际连接 example.net:8443,但请求身份仍按原 URL 处理。
它适合测试备用入口、不同端口或转发目标。与 --resolve 相比,目标端口也能改变;因此记录里必须同时写原 URL 和实际连接目标。
两组安全对照
先执行普通请求,记录 remote_ip、连接时间、首字节和 HTTP 状态。第二组使用 --resolve 固定当前解析出的一个地址。第三组只有在你明确知道备用主机或端口时才使用 --connect-to。
示例:
curl --resolve example.com:443:203.0.113.10 https://example.com/
curl --connect-to example.com:443:backend.example.net:8443 https://example.com/
示例地址不能直接照抄。不要把测试指向无授权的内部地址,也不要在日志中公开带令牌的 URL。
怎样读结果
普通请求失败、--resolve 成功,说明 DNS 返回入口值得继续检查;两者都失败,则问题未必在 DNS。--connect-to 成功只证明指定备用入口可处理原域名,不能证明普通用户的 DNS 路径已经修复。
验收时确认:证书验证开启;原域名没有被替换成裸 IP;每组只改变一个条件;记录实际远端地址和端口;恢复普通请求后仍成功。王牌飞行员机场推荐强调可复查证据,这两个选项应作为受控实验工具,而不是长期绕过正常解析的配置。


评论