golang 获取内网IP.go

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 获取内网IP.go相关的知识,希望对你有一定的参考价值。

// 获取内网IP V4, 获取失败时返回""
func InternalIpV4() string {
	return internalIp(4)
}

// 获取内网IP V6, 获取失败时返回""
func InternalIpV6() string {
	return internalIp(6)
}

// 有多块网卡时,只获取第一个IP
// n 4/6 表示ipv4/ipv6
func internalIp(n int) string {
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return ""
	}

	for _, addr := range addrs {
		if ipnet, ok := addr.(*net.IPNet); ok {
			if !ipnet.IP.IsLoopback() { // not '127.0.0.1'
				if n == 4 && ipnet.IP.To4() != nil {
					//println("ip:", ipnet.IP.String())
					return ipnet.IP.String()
				} else if n == 6 && ipnet.IP.To16() != nil {
					//println("ip:", ipnet.IP.String())
					return ipnet.IP.String()
				}
			}
		}
	}

	return ""
}

golang local_ip.go

// https://stackoverflow.com/questions/23558425/how-do-i-get-the-local-ip-address-in-go
package main
import (
    "fmt"
    "log"
    "net"
)

/** 
 * GetOutboundIP return ip address
 */
func GetOutboundIP() net.IP {
    conn, err := net.Dial("udp", "8.8.8.8:80")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    localAddr := conn.LocalAddr().(*net.UDPAddr)

    return localAddr.IP
}

以上是关于golang 获取内网IP.go的主要内容,如果未能解决你的问题,请参考以下文章

Golang gRPC实现内网穿透

golang爬坑:一个简单的http内网转发

golang 对特定域名根据内网域名是否可以访问返回特定的IP

外网如何获取内网的IP?

怎么实现c#获取ip内网,外网地址?

Linux搭建frp服务,实现内网穿透服务,实现外网到内网的在线访问