Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > go获取本机ip地址

go中如何获取本机ip地址

作者:L小象

这篇文章主要介绍了go中如何获取本机ip地址问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

go获取本机ip地址

获取本机ip的方法:

 
//获取ip
func externalIP() (net.IP, error) {
	ifaces, err := net.Interfaces()
	if err != nil {
		return nil, err
	}
	for _, iface := range ifaces {
		if iface.Flags&net.FlagUp == 0 {
			continue // interface down
		}
		if iface.Flags&net.FlagLoopback != 0 {
			continue // loopback interface
		}
		addrs, err := iface.Addrs()
		if err != nil {
			return nil, err
		}
		for _, addr := range addrs {
			ip := getIpFromAddr(addr)
			if ip == nil {
				continue
			}
			return ip, nil
		}
	}
	return nil, errors.New("connected to the network?")
}
//获取ip
func getIpFromAddr(addr net.Addr) net.IP {
	var ip net.IP
	switch v := addr.(type) {
	case *net.IPNet:
		ip = v.IP
	case *net.IPAddr:
		ip = v.IP
	}
	if ip == nil || ip.IsLoopback() {
		return nil
	}
	ip = ip.To4()
	if ip == nil {
		return nil // not an ipv4 address
	}
	return ip
}

调用:

func main() {
	ip, err := externalIP()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf(ip.String())
}

结果:

Golang获取本机的Mac 和ip地址

获取本机的Mac 和ip地址

1.获取本机的MAC地址

代码如下(示例):

 func GetLocalMac() (mac string) {
	// 获取本机的MAC地址
	interfaces, err := net.Interfaces()
 	if err != nil {
		panic("Poor soul, here is what you got: " + err.Error())
 	}
	for _, inter := range interfaces {
 		fmt.Println(inter.Name)
 		mac := inter.HardwareAddr //获取本机MAC地址
 		fmt.Println("MAC ===== ", mac)
 	}
 	fmt.Println("MAC = ", mac)
	return mac
}

2.获取本机ip地址

代码如下(示例):

 //获取本机ip地址
 func GetIps() (ips []string) {
 	interfaceAddr, err := net.InterfaceAddrs()
 	if err != nil {
 		fmt.Printf("fail to get net interfaces ipAddress: %v\n", err)
 		return ips
 	}
 	for _, address := range interfaceAddr {
 		ipNet, isVailIpNet := address.(*net.IPNet)
 		if isVailIpNet && !ipNet.IP.IsLoopback() {
 			if ipNet.IP.To4() != nil {
 				ips = append(ips, ipNet.IP.String())
 			}
		}
	}
	fmt.Println("ips = ", ips)
	return ips
 }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文