为了测试目的,是否可以绕过 DNS 并将特定域名的 HTTP 请求发送到特定的 IP 地址?
例如,假设您正在为example.com
服务器构建一个网站1.1.1.1
。
如果不更新域的实际 DNS 记录(例如通过注册商或 DNS 提供商)或在本地摆弄 DNS(例如更新 hosts 文件),如何测试如何1.1.1.1
响应 HTTP 请求example.com
?
答案1
您可以使用 CURL 向具有自定义主机标头的服务器发起请求。
curl --header "Host:abc.com" xxxx.xxxx.xxxx.xxxx
答案2
当然,如果你手工完成的话,这很容易。
在 shell 提示符下:
sleep 1; echo GET /some/resource HTTP/1.1; echo host: google.com; echo ''; sleep 10)|tee /dev/tty|telnet 127.0.0.1 80
这将连接到 localhost =127.0.0.1 上的 http 端口 = 80 并请求http://google.com/some/resource
当然,您也可以在某些程序中执行相应操作。诀窍是不依赖浏览器或 Web 组件来解析 URL 并使用该信息建立连接。
答案3
有一个名为DNS 覆盖者它将允许您启用页面上 URL 的 DNS 覆盖。例如,如果我的计算机上有一个本地 html 文件,其IFRAME
'da url ( http://example.com
),那么我可以使用此扩展来创建指向 的别名1.1.1.1
。
但是,请记住,这不会在您的地址栏中起作用。它只对页面内的 URL 起作用。使用元素IFRAME
应该有效。
答案4
(九年后)
使用时curl
您可以使用以下两种方法中的至少一种来指定使用给定域名连接的 IP 地址,--resolve
和--connect-to
。
--resolve <[+]host:port:addr[,addr]...>
为特定主机和端口对提供自定义地址。使用此功能,您可以使 curl 请求使用指定的地址,并防止使用其他正常解析的地址。将其视为
/etc/hosts
命令行上提供的一种替代方案。端口号应为主机所用特定协议的编号。这意味着如果您想为同一主机提供不同端口的地址,则需要多个条目。通过指定
'*'
主机,您可以告诉 curl 将任何主机和特定端口对解析为指定的地址。通配符最后解析,因此任何--resolve
具有特定主机和端口的都会首先使用。即使设置了 或
-4
让curl 使用其他 IP 版本,也会使用此选项设置的提供的地址。--ipv4
-6
--ipv6
通过在主机前加上前缀,
'+'
您可以使条目在 curl 的默认超时(1 分钟)后超时。请注意,这只适用于长时间运行的大量文件的并行传输。在这种情况下,如果使用此选项,curl 会在超时到期后尝试像往常一样解析主机。此选项可多次使用,以添加多个主机名进行解析。
--resolve
可以在命令行中多次使用例子:
`curl --resolve example.com:443:127.0.0.1 https://example.com`
--connect-to <HOST1:PORT1:HOST2:PORT2>
对于对给定对的请求
HOST1:PORT1
,改为连接到HOST2:PORT2
。此选项适用于将请求定向到特定服务器,例如服务器集群中的特定集群节点。此选项仅用于建立网络连接。它不会影响用于 TLS/SSL(例如 SNI、证书验证)或应用程序协议的主机名/端口。"HOST1"
并且"PORT1"
可能是空字符串,表示“任何主机/端口”。"HOST2"
并且"PORT2"
也可能是空字符串,表示“使用请求的原始主机/端口”。为此选项指定的“主机”将作为字符串进行比较,因此需要与请求 URL 中使用的名称匹配。它可以是数字(例如“127.0.0.1”)或完整主机名(例如“example.org”)。
--connect-to
可以在命令行中多次使用例子:
curl --connect-to example.com:443:example.net:8443 https://example.com