go语言渐入佳境-网络[3]-IPAddr

IPAddr

type IPAddr {
IP IP
}
此类型的主要用途是对IP主机名执行DNS查找。

1
func ResolveIPAddr(net, addr string) (*IPAddr, os.Error)
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
/* ResolveIP
*/

package main

import (
"net"
"os"
"fmt"
)

func main() {
if len(os.Args) != 2 {
fmt.Fprintf(os.Stderr, "Usage: %s hostname\n", os.Args[0])
fmt.Println("Usage: ", os.Args[0], "hostname")
os.Exit(1)
}
name := os.Args[1]

addr, err := net.ResolveIPAddr("ip", name)
if err != nil {
fmt.Println("Resolution error", err.Error())
os.Exit(1)
}
fmt.Println("Resolved address is ", addr.String())
os.Exit(0)
}

测试

1
2
$ ./net www.baidu.com
Resolved address is 14.215.177.39

ResolveIPAddr函数将对主机名执行DNS查找,并返回单个IP地址。
但是,主机可能有多个IP地址,通常来自多个网卡。它们也可能有多个主机名,充当别名。

1
func LookupHost(name string) (addrs []string, err os.Error)

其中一个地址将被标记为“规范(canonical)”主机名。如果您希望找到规范名称,请使用

1
func LookupCNAME(name string) (cname string, err os.Error)
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
/* LookupHost
*/

package main

import (
"net"
"os"
"fmt"
)

func main() {
if len(os.Args) != 2 {
fmt.Fprintf(os.Stderr, "Usage: %s hostname\n", os.Args[0])
os.Exit(1)
}
name := os.Args[1]

addrs, err := net.LookupHost(name)
if err != nil {
fmt.Println("Error: ", err.Error())
os.Exit(2)
}

for _, s := range addrs {
fmt.Println(s)
}
os.Exit(0)
}

测试2

1
2
3
4
$ go build .
jacksondeMacBook-Pro:net jackson$ ./net www.baidu.com
14.215.177.38
14.215.177.39