豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: go获取本地ip

🤖 Ai回答:
在 Go 语言中获取本地 IP 地址有多种方法,以下是几种常用的实现方式:

方法一:获取默认网卡的 IP

go
package main

import (
fmt
net
)

func getLocalIP() (string, error) {
addrs, err := net.InterfaceAddrs()
if err != nil {
return , err
}

for _, addr := range addrs {
if ipnet, ok := addr.(*net.IPNet); ok {
// 过滤掉回环地址和 IPv6 地址
if !ipnet.IP.IsLoopback() && ipnet.IP.To4() != nil {
return ipnet.IP.String(), nil
}
}
}

return , fmt.Errorf(no local IP found)
}

func main() {
ip, err := getLocalIP()
if err != nil {
fmt.Printf(Error: %v\n, err)
return
}
fmt.Printf(Local IP: %s\n, ip)
}

方法二:获取指定网卡的 IP

go
package main

import (
fmt
net
)

func getSpecificInterfaceIP(interfaceName string) (string, error) {
iface, err := net.InterfaceByName(interfaceName)
if err != nil {
return , err
}

addrs, err := iface.Addrs()
if err != nil {
return , err
}

for _, addr := range addrs {
if ipnet, ok := addr.(*net.IPNet); ok {
if ipnet.IP.To4() != nil {
return ipnet.IP.String(), nil
}
}
}

return , fmt.Errorf(no IPv4 address found on interface %s, interfaceName)
}

func main() {
// 获取 eth0 网卡的 IP
ip, err := getSpecificInterfaceIP(eth0)
if err != nil {
fmt.Printf(Error: %v\n, err)
return
}
fmt.Printf(Interface eth0 IP: %s\n, ip)
}

方法三:获取所有非回环的 IPv4 地址

go
package main

import (
fmt
net
)

func getAllLocalIPv4() ([]string, error) {
var ips []string

interfaces, err := net.Interfaces()
if err != nil {
return nil, err
}

for _, iface := range interfaces {
// 跳过 down 状态和回环接口
if !iface.IsUp() iface.Flags&net.FlagLoopback != 0 {
continue
}

addrs, err := iface.Addrs()
if err != nil {
continue
}

for _, addr := range addrs {
if ipnet, ok := addr.(*net.IPNet); ok {
if ipnet.IP.To4() != nil {
ips = append(ips, ipnet.IP.String())
}
}
}
}

return ips, nil
}

func main() {
ips, err := getAllLocalIPv4()
if err != nil {
fmt.Printf(Error: %v\n, err)
return
}

fmt.Println(All local IPv4 addresses:)
for _, ip := range ips {
fmt.Printf(%s\n, ip)
}
}

方法四:通过连接外部服务器获取出口 IP

go
package main

import (
fmt
net
)

func getExternalIP() (string, error) {
conn, err := net.Dial(udp, 8.8.8.8:53)
if err != nil {
return , err
}
defer conn.Close()

localAddr := conn.LocalAddr().(*net.UDPAddr)
return localAddr.IP.String(), nil
}

func main() {
ip, err := getExternalIP()
if err != nil {
fmt.Printf(Error: %v\n, err)
return
}
fmt.Printf(External IP (local address): %s\n, ip)
}

方法五:更完整的 IP 获取函数

go
package main

import (
fmt
net
strings
)

func getLocalIPs() ([]string, error) {
var ips []string

// 获取所有网络接口
interfaces, err := net.Interfaces()
if err != nil {
return nil, err
}

for _, iface := range interfaces {
// 跳过不活跃的接口和回环接口
if !iface.IsUp() iface.Flags&net.FlagLoopback != 0 {
continue
}

// 获取接口的地址列表
addrs, err := iface.Addrs()
if err != nil {
continue
}

for _, addr := range addrs {
switch v := addr.(type) {
case *net.IPNet:
ip := v.IP.To4()
if ip != nil {
// 过滤掉私有地址范围(可选)
if !isPrivateIP(ip.String()) {
ips = append(ips, ip.String())
}
}
case *net.IPAddr:
ip := v.IP.To4()
if ip != nil {
ips = append(ips, ip.String())
}
}
}
}

return ips, nil
}

// 判断是否为私有 IP 地址
func isPrivateIP(ip string) bool {
if strings.HasPrefix(ip, 10.)
strings.HasPrefix(ip, 172.16.)
strings.HasPrefix(ip, 172.17.)
strings.HasPrefix(ip, 172.18.)
strings.HasPrefix(ip, 172.19.)
strings.HasPrefix(ip, 172.20.)
strings.HasPrefix(ip, 172.21.)
strings.HasPrefix(ip, 172.22.)
strings.HasPrefix(ip, 172.23.)
strings.HasPrefix(ip, 172.24.)
strings.HasPrefix(ip, 172.25.)
strings.HasPrefix(ip, 172.26.)
strings.HasPrefix(ip, 172.27.)
strings.HasPrefix(ip, 172.28.)
strings.HasPrefix(ip, 172.29.)
strings.HasPrefix(ip, 172.30.)
strings.HasPrefix(ip, 172.31.)
strings.HasPrefix(ip, 192.168.) {
return true
}
return false
}

func main() {
ips, err := getLocalIPs()
if err != nil {
fmt.Printf(Error: %v\n, err)
return
}

fmt.Println(Local IP addresses:)
for _, ip := range ips {
fmt.Printf(%s\n, ip)
}
}

使用建议

1、方法一 最常用,适合大多数场景
2、方法二 当你需要特定网卡的 IP 时使用
3、方法三 需要获取所有可用的本地 IP 时使用
4、方法四 获取实际的出口 IP(通过 UDP 连接)
5、方法五 功能最完整,包含私有 IP 过滤等

选择哪种方法取决于你的具体需求。通常情况下,方法一是最实用的选择。

Ai作答

📣 商家广告


八字

高防vps

香港vps

广东过滤器

广告招商


0

IP地址: 120.10.202.215

搜索次数: 0

提问时间: 2025-11-03 09:58:38

🛒 域名购买
te.biz
ww.fj.cn
chemen.com.cn
2.bj.cn
wc.chat
93.gold
lansou.cn
70.gs
32.cx
e-j.com.cn

❓️ 热门提问
forge服务器搭建
com域名注册机构
网上服务器租赁
Stack Overflow
济南域名注册
棉花云服务器
ip卡通形象
云计算100强
出售自己的域名
全球vps交流
豌豆Ai站群搜索引擎系统

🌐 域名评估
3q.sh.cn
CDs.com.cn
qhug.cn
xphone.center
evfair.org.cn
sharktech.net
aa.yn.cn
4qd.cn
iveh.cn
drone.nx.cn

⛏ 最新挖掘
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜

🖌 热门作画

🤝 关于我们:
豌豆Ai 域名 建站 站群 留痕 推广 评估 源码
开发Ai 工具 日记 价格 加盟 广告 流量 留言 联系

🗨 加入群聊
群

🔗 友情链接
软件开发平台  站群谷歌seo  ai提问

🧰 站长工具
Ai工具  whois查询  搜索

📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。

上一篇 53573 53574 53575 下一篇