ip.go 中定义了三个类型.分别是.IP,IPMask,IPNet
IP类型被定义为一个字节数组。 ParseIP(String) 可以将字符窜转换为一个IP类型.
name := "127.0.0.1" addr := net.ParseIP(name) fmt.Println(addr.IsLoopback())
func main() { name := "127.0.0.1" addr := net.ParseIP(name) fmt.Println(addr.Mask(net.IPv4Mask(byte(255), byte(255), byte(255), byte(0)))) fmt.Println(addr.Mask(net.IPv4Mask(byte(128), byte(0), byte(0), byte(0)))) }
一个掩码的字符串形式是一个十六进制数,如掩码255.255.0.0为ffff0000。
mask := net.IPv4Mask(byte(255), byte(255), byte(255), byte(0)) ones, bits := mask.Size()
由IP类型和IPMask组成一个网段,其字符窜形式是CIDR地址,如:“192.168.100.1/24”或“2001:DB8::/ 48”
func main() { mask := net.IPv4Mask(byte(255), byte(255), byte(255), byte(0)) ip := net.ParseIP("192.168.1.125").Mask(mask) in := &net.IPNet{ip, mask} fmt.Println(in) // 192.168.1.0/24 }
fmt.Println(in.Contains(net.ParseIP("192.168.1.55")))
位于iprawsock.go中在net包的许多函数和方法会返回一个指向IPAddr的指针。这不过只是一个包含IP类型的结构体。
type IPAddr struct { IP IP }
这个类型的主要用途是通过IP主机名执行DNS查找。
ResolveIPAddr有两个参数第一个参数.必须为"ip","ip4","ip6",第二个参数多为要解析的域名.返回一个IPAddr的指针类型
addr, _ := net.ResolveIPAddr("ip", "www.baidu.com") fmt.Println(addr)
位于tcpsock.go中TCPAddr类型包含一个IP和一个port的结构:
type TCPAddr struct { IP IP Port int }
func ResolveTCPAddr(net, addr string) (*TCPAddr, os.Error)
该函数用来创建一个TCPAddr,第一个参数为,tcp,tcp4或者tcp6,addr是一个字符串,由主机名或IP地址,以及":"后跟随着端口号组成,例如: "www.google.com:80" 或 '127.0.0.1:22"。如果地址是一个IPv6地址,由于已经有冒号,主机部分,必须放在方括号内, 例如:"[::1]:23". 另一种特殊情况是经常用于服务器, 主机地址为0, 因此,TCP地址实际上就是端口名称, 例如:":80" 用来表示HTTP服务器。
addr, _ := net.ResolveTCPAddr("tcp", "www.baidu.com:80") fmt.Println(addr) //220.181.111.147:80
type UDPAddr struct { IP IP Port int }
type UnixAddr struct { Name string Net string }