如何向特定IP地址发送针对某个域名的HTTP请求?

如何向特定IP地址发送针对某个域名的HTTP请求?

为了测试目的,是否可以绕过 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

相关内容