GO·NOTE

一份 Go 开发工程师的学习笔记

0%

通过域名获取ip

当网络不通的情况下,通常会想到ping命令,ping一下,但是ping命令内部如何执行的,可能并不清楚,其实ping是基于ICMP协议进行工作的。

ip 和 icpm文章: https://www.cnblogs.com/ssh-html/p/10436168.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"fmt"
"log"
"net"
)

func main() {
address := "xmge.top"
conn, err := net.Dial("ip:icmp", "xmge.top")
if err != nil {
log.Fatal(err)
}
add := conn.RemoteAddr()
fmt.Printf("%s's ip is %s:", address, add.String())
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main

import (
"fmt"
"net"
)

func main() {
//查找DNS A记录
iprecords, _ := net.LookupIP("xmge.top")
for _, ip := range iprecords {
fmt.Println(ip)
}
//查找DNS CNAME记录
canme, _ := net.LookupCNAME("www.baidu.com")
fmt.Println(canme)
//查找DNS PTR记录
ptr, e := net.LookupAddr("118.24.10.218")
if e != nil {
fmt.Println(e)
}
for _, ptrval := range ptr {
fmt.Println(ptrval)
}
//查找DNS NS记录
nameserver, _ := net.LookupNS("baidu.com")
for _, ns := range nameserver {
fmt.Println("ns记录", ns)
}
//查找DNS MX记录
mxrecods, _ := net.LookupMX("google.com")
for _, mx := range mxrecods {
fmt.Println("mx:", mx)
}
//查找DNS TXT记录
txtrecords, _ := net.LookupTXT("baidu.com")

for _, txt := range txtrecords {
fmt.Println("txt:", txt)
}
}

ping 和 nslookup 的区别

ping出来的是一台服务器的IP,而nslookup是查看该域名有哪几台服务器提供服务,很多公司都使用了负载均衡技术,将用户的访问随机定到某一台服务器上,所以你ping的可能有时候不一样,而nslookup则能看到所有提供服务的服务器。是因为权威是说你ping出来是本地区的服务器的地址,而nslookup是所有的地址,还有就是ping主要是测试服务器跟本机的连通性,所以ping就显得准确了!