ip域名整合数据

89 阅读1分钟

今天在遇到一个需求,有很多的ip和域名,要求统一转成ip

  • 如下图:

image.png

  • 那的思路是先讲ip和域名分割出来,然后循环判断哪些是域名,当然这里必不可少离不开正则表达式了。 上代码。

代码如下

func ParseDomainIp(domain string) ([]net.IP, error) {  
// 正则表达式模式  
pattern1 := `^(?:(?:https?://)?(?:www\.)?)?([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$`  
pattern2 := `^(?:https?://)?(?:www\.)?([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.[a-zA-Z]{2,})$`  
// 编译正则表达式  
reg1 := regexp.MustCompile(pattern1)  
  
// 匹配  
if reg1.MatchString(domain) {  
reg2 := regexp.MustCompile(pattern2)  
match2 := reg2.FindStringSubmatch(domain)  
if match2 != nil {  
// 获取捕获组中的域名部分  
capturedDomain := match2[1]  
//将域名解析为ip  
ips, err := net.LookupIP(capturedDomain)  
if err != nil {  
  
return nil, errors.New("解析域名为Ip失败:" + err.Error())  
}  
return ips, nil  
} else {  
fmt.Println("正则匹配出域名失败,您提供很可能不是一个完整的域名")  
}  
} else {  
return nil, errors.New("并不是域名")  
}  
return nil, nil  
}

最后调用

func main() {  
domain := "https://grpc.vip"  
ips, err := ParseDomainIp(domain)  
if err != nil {  
fmt.Println("结果:", err.Error())  
return  
}  
  
for _, ip := range ips {  
fmt.Println("IP:", ip)  
}  
  
}

结果如下图:

image.png