为了账号安全,请及时绑定邮箱和手机立即绑定

从特定 IP 获取 HTTPS 资产并跳过 DNS 查找

从特定 IP 获取 HTTPS 资产并跳过 DNS 查找

Go
LEATH 2022-01-10 16:48:28
我正在为无法查询 DNS 的设备编写一些代码。我将只有端口 80 和 443 可用。以下工作,但当然命中DNS。使用的域是我的个人域,而不是问题所针对的真实域 - 它与工作相关并经过编辑。这只是用来说明问题。package mainimport (    “log”    “net/http”)func main() {    client := &http.Client{}    req, err := http.NewRequest(“GET”, “https://donatstudios.com/images/Spacecat/spacecat.svg”, nil)    if err != nil {        log.Fatal(err)    }    _, err = client.Do(req)    if err != nil {        log.Fatal(err)    }    log.Fatal(“no errors”)}我更改代码以命中特定的 IP 地址 ala:package mainimport (    “log”    “net/http”)func main() {    client := &http.Client{}    req, err := http.NewRequest(“GET”, “https://162.243.23.224/images/Spacecat/spacecat.svg”, nil)    if err != nil {        log.Fatal(err)    }    req.Host = “donatstudios.com”    _, err = client.Do(req)    if err != nil {        log.Fatal(err)    }    log.Fatal(“no errors”)}现在收到“无法验证 162.243.23.224 的证书,因为它不包含任何 IP SAN”当不使用 https 域时,上述代码有效。大概这与 SSL 有关。#go-nuts 告诉我他们相信这会在它到达 HTTP 层之前发生?我已经戳了好几个小时了,不知道如何让它工作。
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

我假设您的服务器正在使用 SNI,就像示例中使用的一样。试试这个,看看它是否适合你。


package main


import (


    "crypto/tls"

    "log"

    "net/http"


)


func main() {


    tlsConfig := &tls.Config{

        ServerName: "moupon.co",

    }

    tlsConfig.BuildNameToCertificate()

    transport := &http.Transport{TLSClientConfig: tlsConfig}


    client := &http.Client{Transport: transport}

    req, err := http.NewRequest("GET", "https://216.239.32.21/s/img/logo.png", nil)

    if err != nil {

        log.Fatal(err)

    }

    req.Host = "moupon.co"


    _, err = client.Do(req)

    if err != nil {

        log.Fatal(err)

    }


    log.Fatal("no errors")

}


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信