Golang net包下操作IP的常用函數

net包對於網絡I/O提供了便攜式接口,包括TCP/IP,UDP,域名解析以及Unix Socket,經常用來解析ip或者host。

Golang net包下操作IP的常用函數

常用的幾個函數介紹:

func InterfaceAddrs() ([]Addr, error) //InterfaceAddrs返回該系統的網絡接口的地址列表。

func JoinHostPort(host, port string) string //JoinHostPort將host和port合併為一個網絡地址。

func LookupAddr(addr string) (name []string, err error) //對於給定的地址進行反向查找,並返回映射到那個地址的一個list列表

func LookupHost(host string) (addrs []string, err error) //通過利用本地解析器對給定的host進行查找,返回主機地址的數組

func Dial(network, address string) (Conn, error) //Dial 連接到指定address和name的網絡

示例:

package main

import (

"fmt"

"net"

)

func main() {

addr, _ := net.InterfaceAddrs()

fmt.Println(addr) //[127.0.0.1/8 10.236.15.24/24 ::1/128 fe80::3617:ebff:febe:f123/64]

hp := net.JoinHostPort("127.0.0.1", "8080")

fmt.Println(hp) //127.0.0.1:8080,根據ip和端口組成一個addr字符串表示

lt, _ := net.LookupAddr("127.0.0.1")

fmt.Println(lt) //[localhost],根據地址查找到改地址的一個映射列表

host, _ := net.LookupHost("www.baidu.com")

fmt.Println(host) //[111.13.100.92 111.13.100.91],查找給定域名的host名稱

}

經典案例:

golang判斷是否本機ip:

func isLocalIP(ip string) (bool, error) {

addrs, err := net.InterfaceAddrs()

if err != nil {

return false, err

}

for i := range addrs {

intf, _, err := net.ParseCIDR(addrs[i].String()) //net.ParseCIDR 解析IP

if err != nil {

return false, err

}

if net.ParseIP(ip).Equal(intf) {

return true, nil

}

}

return false, nil

}

更多內容請關注每日編程,每天進步一點。


分享到:


相關文章: