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
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
