在 golang 中获取本机 ip 地址的方法有:使用 net 包的 interfaces 函数遍历网络接口并获取启用且非回路接口的 ip 地址。使用 syscall 包的 getsockopt 函数获取套接字选项,其中包含本机 ip 地址。
如何获取 Golang 本机 IP
在 Golang 中有多种方法可以获取本机 IP 地址。
1. 使用 net 包
net 包提供了 Interfaces 函数,可以返回系统中所有网络接口的信息。我们可以使用它来查找本机 IP 地址。
import ( "fmt" "log" "net" ) func main() { // 获取所有网络接口信息 interfaces, err := net.Interfaces() if err != nil { log.Fatal(err) } // 遍历所有接口 for _, iface := range interfaces { // 检查接口是否启用并且不是回路接口 if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 { continue } // 获取该接口的地址 addrs, err := iface.Addrs() if err != nil { log.Fatal(err) } // 输出 IP 地址 for _, addr := range addrs { ip, ok := addr.(*net.IPNet) if !ok { continue } fmt.Println(ip.IP.String()) } } }
登录后复制
2. 使用 syscall 包
syscall 包提供了 Getsockopt 函数,可以获取套接字选项。我们可以使用它来获取本机 IP 地址。
import ( "fmt" "net" "syscall" ) func main() { // 创建 Socket fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, 0) if err != nil { log.Fatal(err) } defer syscall.Close(fd) // 绑定 Socket 到本地地址 addr := &syscall.SockaddrInet4{ Port: 0, } err = syscall.Bind(fd, addr) if err != nil { log.Fatal(err) } // 获取套接字选项,其中包括本机 IP 地址 var ifreq syscall.Ifreq copy(ifreq.Name[:], []byte("eth0")) // 接口名称,可以根据实际情况修改 err = syscall.Getsockopt(fd, syscall.SOL_SOCKET, syscall.SO_BINDTODEVICE, uintptr(unsafe.Pointer(&ifreq))) if err != nil { log.Fatal(err) } // 解析 IP 地址 ip := net.ParseIP(syscall.InetNtop4(ifreq.Addr[:], 0)) // 输出 IP 地址 fmt.Println(ip.String()) }
登录后复制
以上就是golang怎么获取本机ip的详细内容,更多请关注叮当号网其它相关文章!
文章来自互联网,只做分享使用。发布者:城南北边,转转请注明出处:https://www.dingdanghao.com/article/579145.html