net包详解-基础类型
ip.go 中定义了三个类型.分别是.IP,IPMask,IPNet
IP类型
IP类型被定义为一个字节数组。 ParseIP(String) 可以将字符窜转换为一个IP类型.
name := "127.0.0.1" addr := net.ParseIP(name) fmt.Println(addr.IsLoopback())
常用方法
- Equal(x IP) bool
- 比较两个IP地址是否相等
- DefaultMask() IPMask
- 一个IP返回默认的掩码.返回的类型是IPMask
- Mask(mask IPMask) IP
- 使用一个掩码可以使用一个IP地址的方法,找到该IP地址的网络
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)))) }
IPMask类型
一个掩码的字符串形式是一个十六进制数,如掩码255.255.0.0为ffff0000。
- func IPv4Mask(a, b, c, d byte) IPMask :用一个4字节的IPv4地址来创建一个掩码.
- func CIDRMask(ones, bits int) IPMask : 用ones和bits来创建一个掩码
常用方法
- Size() (ones, bits int)
- 返回ones和bits
mask := net.IPv4Mask(byte(255), byte(255), byte(255), byte(0)) ones, bits := mask.Size()
IPNet类型
由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 }
- Contains(ip IP) bool
- 检查ip是否在这个网段
fmt.Println(in.Contains(net.ParseIP("192.168.1.55")))
- Network() string
- 返回这个地址的network名称, "ip+net".
IPAddr类型
位于iprawsock.go中在net包的许多函数和方法会返回一个指向IPAddr的指针。这不过只是一个包含IP类型的结构体。
type IPAddr struct { IP IP }
这个类型的主要用途是通过IP主机名执行DNS查找。
ResolveIPAddr
ResolveIPAddr有两个参数第一个参数.必须为"ip","ip4","ip6",第二个参数多为要解析的域名.返回一个IPAddr的指针类型
addr, _ := net.ResolveIPAddr("ip", "www.baidu.com") fmt.Println(addr)
TCPAddr类型
位于tcpsock.go中TCPAddr类型包含一个IP和一个port的结构:
type TCPAddr struct { IP IP Port int }
ResolveTCPAddr
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
UDPAddr类型
type UDPAddr struct { IP IP Port int }
ResolveUDPAddr
UnixAddr类型
type UnixAddr struct { Name string Net string }