如何解决在域中按域名查找IP地址
我正在使用以下代码编写API,以查找给定域的IP地址:
func IPFinder(c *gin.Context) {
var domain models.Domain
c.BindJSON(&domain)
addr,err := net.LookupIP(domain.DomainName)
if err != nil {
c.JSON(http.StatusBadRequest,gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK,gin.H{"ip_address": addr})
}
return
}
对于以下请求:
{
"domain_name": "google.com"
}
得到的响应为:
{
"ip_address": [
"2404:6800:4002:80a::200e","172.217.167.46"
]
}
此处,此LookupIP方法提供了包含该域的ipv4和ipv6地址的切片。 GoLang中是否还有其他任何第三方库的其他方式,使用该方式我可以得到仅包含如下IP地址的输出:
{
"ip_address": "172.217.167.46"
}
解决方法
如果您仅对IPv4地址感兴趣,则可以这样获得它:
package main
import (
"fmt"
"net"
)
func main(){
ips,_ := net.LookupIP("google.com")
for _,ip := range ips {
if ipv4 := ip.To4(); ipv4 != nil {
fmt.Println("IPv4: ",ipv4)
}
}
}
,
您可以使用cloudflare-dns.com上的DNS-over-HTTPS服务,请参阅here。
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
type DnsJson struct {
Status int `json:"Status"`
TC bool `json:"TC"`
RD bool `json:"RD"`
RA bool `json:"RA"`
AD bool `json:"AD"`
CD bool `json:"CD"`
Question []struct {
Name string `json:"name"`
Type int `json:"type"`
} `json:"Question"`
Answer []struct {
Name string `json:"name"`
Type int `json:"type"`
TTL int `json:"TTL"`
Data string `json:"data"`
} `json:"Answer"`
}
func main() {
req,err := http.NewRequest("GET","https://cloudflare-dns.com/dns-query",nil)
if err != nil {
log.Fatal(err)
}
q := req.URL.Query()
q.Add("ct","application/dns-json")
q.Add("name","cloudflare.com") // Insert here your domain
req.URL.RawQuery = q.Encode()
client := &http.Client{}
if err != nil {
log.Fatal(err)
}
res,err := client.Do(req)
defer res.Body.Close()
body,err := ioutil.ReadAll(res.Body)
var dnsResult DnsJson
if err := json.Unmarshal(body,&dnsResult); err != nil {
log.Fatal(err)
}
for _,dnsAnswer := range dnsResult.Answer {
fmt.Println("IP:",dnsAnswer.Data)
}
// Output
// IP: 104.17.175.85
// IP: 104.17.176.85
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。