用go获取IPv4地址,WLAN的IPv4地址,本机公网IP地址详解
文章目录
- 获取IPv4地址
- 获取WLAN的IPv4地址
- 获取本机公网IP地址
获取IPv4地址
下面的代码会打印出本机所有的IPv4地址。这个方法可能会返回多个IP地址,因为一台机器可能有多个网络接口,每个接口可能有一个或多个IP地址。
package mainimport ("fmt""net""os"
)func main() {addrs, err := net.InterfaceAddrs()if err != nil {fmt.Println(err)os.Exit(1)}for _, addr := range addrs {if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {if ipnet.IP.To4() != nil {fmt.Println("IPv4: ", ipnet.IP.String())}}}
}
运行结果:
IPv4: 169.254.157.225
IPv4: 169.254.28.142
IPv4: 169.254.211.187
IPv4: 192.168.144.1
IPv4: 192.168.253.1
IPv4: 10.252.64.116
IPv4: 169.254.106.194
IPv4: 169.254.109.149
IPv4: 172.28.240.1
甚至比我在终端使用ipconfig命令得到的IPv4地址还要多。

获取WLAN的IPv4地址
当然这么多IPv4地址并不一定都是我们想要的,对于用wifi上网的电脑,我们想获取无线局域网适配器 WLAN的IPv4地址可以按下面的代码操作:
package mainimport ("fmt""net""os"
)func main() {interfaces, err := net.Interfaces()if err != nil {fmt.Println(err)os.Exit(1)}for _, i := range interfaces {if i.Name == "WLAN" {addrs, err := i.Addrs()if err != nil {fmt.Println(err)continue}for _, addr := range addrs {if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {if ipnet.IP.To4() != nil {fmt.Println("IPv4: ", ipnet.IP.String())}}}}}
}
运行结果:
IPv4: 10.252.64.116
经过和上图比对,结果正确。
获取本机公网IP地址
那如果我们想获取本机的公网IP地址,那该怎么操作呢?我这里介绍两种方法:
第一种方法将通过与Google的公共DNS服务器建立UDP连接来获取公网IP地址。
package mainimport ("fmt""net"
)func main() {conn, err := net.Dial("udp", "8.8.8.8:80")if err != nil {fmt.Println(err)return}defer conn.Close()localAddr := conn.LocalAddr().(*net.UDPAddr)fmt.Println("My public IP address is:", localAddr.IP.String())
}
运行结果:
My public IP address is: 10.252.64.116
经过比对,结果正确。我们可以发现如果我们的电脑是用WiFi上网的,用此方法得出的结果与WLAN的IPv4地址相同。
第二种方法依赖于第三方服务,如果该服务不可用,可能无法获取到IP地址。此外,由于这个方法涉及到网络通信,所以可能会比获取本地IP地址慢一些。同时该方法出错的风险也较高。
package mainimport ("fmt""io/ioutil""net/http"
)func main() {resp, err := http.Get("https://api.ipify.org")if err != nil {fmt.Println(err)return}defer resp.Body.Close()ip, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println(err)return}fmt.Println("My public IP address is: ", string(ip))
}
除了使用 https://api.ipify.org,还有其他一些服务可以提供公网IP地址,例如 https://ifconfig.me 和 https://icanhazip.com。
相关文章:
用go获取IPv4地址,WLAN的IPv4地址,本机公网IP地址详解
文章目录 获取IPv4地址获取WLAN的IPv4地址获取本机公网IP地址 获取IPv4地址 下面的代码会打印出本机所有的IPv4地址。这个方法可能会返回多个IP地址,因为一台机器可能有多个网络接口,每个接口可能有一个或多个IP地址。 package mainimport ("fmt&…...
Android自定义Drawable---灵活多变的矩形背景
Android自定义Drawable—灵活多变的矩形背景 在安卓开发中,我们通常需要为不同的按钮设置不同的背景以实现不同的效果,有时还需要这些按钮根据实际情况进行变化。如果采用编写resource中xml文件的形式,就需要重复定义许多只有微小变动的资源…...
ParagonNTFSforMac_15.5.102中文版最受欢迎的NTFS硬盘格式读取工具
Paragon NTFS for Mac是一款可以为您轻松解决Mac平台上不能识别Windows通用的NTFS文件难题,这是一款强大的Mac读写工具,相信在很多时候,Mac用户需要对NTFS文件的移动硬盘进行写入,但是macOS系统默认是不让写入的,使用小…...
Kafka 搭建过程
目录 1.关于Kafka2.Kafka 搭建过程3.参考 本文主要介绍Kafka基本原理,以及搭建过程。 1.关于Kafka Apache Kafka是一个开源的分布式事件流平台,被设计用来实现实时数据流的发布、订阅、存储和处理。 Kafka的主要特性包括: 高吞吐量&#x…...
七、2023.10.1.Linux(一).7
文章目录 1、 Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。2、文件权限怎么修改?3、说说常用的Linux命令?4、说说如何以root权限运行某个程序?5、 说说软链接和硬链接的区别?6、说说静态库和动态…...
一文教你搞懂Redis集群
一、Redis主从 1.1、搭建主从架构 单节点的Redis的并发能力是有上限的,要进一步的提高Redis的并发能力,据需要大家主从集群,实现读写分离。 共包含三个实例,由于资源有限,所以在一台虚拟机上,开启多个red…...
树上启发式合并 待补
对于每个子树,直接遍历所有轻儿子,继承重儿子 会了板子后,修改维护的东西和莫队是一样的 洛谷 U41492 #include <bits/stdc.h> #define ll long long #define ull unsigned long long constexpr int N1e55; std::vector<int> e…...
minio分布式文件存储
基本介绍 什么是 MinIO MinIO 是一款基于 Go 语言的高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。基于 Apache License v2.0 开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应…...
Linux新的IO模型io_uring
一、Linux下的网络通信模型 在网络开发的过程中,需要处理好几个问题。首先是通信的内核支持问题;其次是通信的模型问题;最后是框架问题。这些问题在闭源的OS如Windows上,基本上不算什么大问题(因为只能用人家的API&am…...
FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍
FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍 FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍FFmpeg 简介FFmpeg 基础知识复用与解复用编解码器码率和帧率 资料 FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍 本系列文章要解决的问题࿱…...
数组篇 第一题:删除排序数组中的重复项
更多精彩内容请关注微信公众号:听潮庭。 第一题:删除排序数组中的重复项 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应…...
堆的初步认识
在学习本节文章前要先了解:大顶堆与小顶堆: (优先级队列_加瓦不加班的博客-CSDN博客) 堆实现 计算机科学中,堆是一种基于树的数据结构,通常用完全二叉树实现。 什么叫完全二叉树? 答&#x…...
CycleGAN模型之Pytorch实战
一、CycleGAN基本介绍 1. CycleGAN论文:《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》 2. 原文代码:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 3. 网传精简代码:https://github.com/aitorzip/PyTorch-CycleGAN …...
C++(STL容器适配器)
前言: 适配器也称配接器(adapters)在STL组件的灵活组合运用功能上,扮演着轴承、转换器的角色。 《Design Patterns》对adapter的定义如下:将一个class的接口转换为另一个class的接口,使原本因接口不兼容而…...
软考 系统架构设计师系列知识点之软件架构风格(7)
接前一篇文章:软考 系统架构设计师系列知识点之软件架构风格(6) 这个十一注定是一个不能放松、保持“紧”的十一。由于报名了全国计算机技术与软件专业技术资格(水平)考试,11月4号就要考试,因此…...
【Vue3】自定义指令
除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 还允许你注册自定义的指令 (Custom Directives)。 1. 生命周期钩子函数 一个自定义指令由一个包含类似组件生命周期钩子的对象来定义。钩子函数会接收到指令所绑定元素作为其参数。 在 <script …...
UG\NX CAM二次开发 加工模块获取 UF _ask_application_module
文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 加工模块获取 UF _ask_application_module 代码: void MyClass::do_it() { // TODO: add your code here // 获取NX当前所在的模块 int module_id = 0; // UF_ask_application_module(&…...
借助GPU算力编译Android
借助GPU算力编译Android 借助GPU编译Android代码的意义在于提高编译的效率和速度。传统的CPU编译方式在处理大量代码时可能会遇到性能瓶颈,而GPU编译利用了显卡的并行计算能力,可以同时处理多个任务,加快编译过程。通过利用GPU的并行计算能力,可以将编译过程中的多个任务分…...
docker-compose一键部署mysql
1.创建安装目录 mnt为硬盘挂载目录,根据实际情况修改 mkdir -p /mnt/mysql cd /mnt/mysql vim docker-compose.yml2.编写docker-compose.yml version: 3.1 services:db:image: mysql:5.7 #mysql版本volumes:- ./data/db:/var/lib/mysql #数据文件- ./etc/my.cnf:/…...
MATLAB 函数签名器
文章目录 MATLAB 函数签名器注释规范模板参数类型 kind数据格式 type选项的支持 使用可执行程序封装为m函数程序输出 编译待办事项推荐阅读附录 MATLAB 函数签名器 MATLAB 函数签名器 (FUNCSIGN) ,在规范注释格式的基础上为函数文件或类文件自动生成函数签名&#…...
4大核心能力赋能企业级视频资源管理:抖音批量下载工具的技术实现与商业价值
4大核心能力赋能企业级视频资源管理:抖音批量下载工具的技术实现与商业价值 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字化内容爆发的时代,企业级视频资源管理面临着效率与成…...
旧Mac重生指南:用OpenCore Legacy Patcher解锁macOS新版本
旧Mac重生指南:用OpenCore Legacy Patcher解锁macOS新版本 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台性能依然强劲却被苹果官方抛弃的旧Mac&…...
SDMatte高可用集群部署:基于Kubernetes的弹性伸缩方案
SDMatte高可用集群部署:基于Kubernetes的弹性伸缩方案 1. 为什么需要高可用部署方案 电商大促期间,某美妆品牌突然发现他们的AI抠图服务崩溃了——每秒上千张的商品图等待处理,但单机部署的服务早已不堪重负。这种场景在企业级AI应用部署中…...
效果实测:nli-distilroberta-base处理长文本与跨语言推理能力
效果实测:nli-distilroberta-base处理长文本与跨语言推理能力 1. 模型核心能力概览 nli-distilroberta-base作为轻量级自然语言推理模型,在文本理解任务中展现出独特优势。这个基于RoBERTa架构的蒸馏版本,保留了原模型90%以上的性能&#x…...
Qwen3.5-4B-Claude-Opus实际作品:正则表达式语法树构建与匹配逻辑推演
Qwen3.5-4B-Claude-Opus实际作品:正则表达式语法树构建与匹配逻辑推演 1. 模型能力概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专注于逻辑推理和结构化分析的轻量级AI模型。作为Qwen3.5-4B的蒸馏版本,它在处理代码解释、算法分析…...
手把手教你魔改YOLOv8:从CSPPC到SPPELAN的实战调优(新手友好版)
1. 为什么需要魔改YOLOv8? 目标检测是计算机视觉领域最基础也最实用的技术之一,而YOLOv8作为当前最流行的实时检测框架,凭借其出色的速度和精度平衡,已经成为工业界和学术界的首选。但在实际项目中,我们经常会遇到一些…...
Phi-3-mini-128k-instruct辅助Dev-C++初学者:C/C++编译错误智能解读
Phi-3-mini-128k-instruct:你的Dev-C编程“陪练” 刚学C/C那会儿,你是不是也经常被Dev-C弹出的那一大串编译错误信息搞得一头雾水?什么“undefined reference”,什么“expected ‘;’ before ‘}’ token”,每个单词都…...
Golang错误处理实战:defer、panic和recover的正确打开方式(附避坑指南)
Golang错误处理实战:defer、panic和recover的正确打开方式(附避坑指南) 在Golang的世界里,错误处理是一门艺术。与传统的try-catch机制不同,Go采用了独特的defer-panic-recover组合拳。这种设计哲学体现了Go语言"…...
NsEmuTools:开源模拟器管理工具的质量保障与工程实践
NsEmuTools:开源模拟器管理工具的质量保障与工程实践 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools 在开源项目的生命周期中,如何在快速迭代与代码质量之间找到平…...
如何高效访问优质内容?bypass-paywalls-chrome-clean工具全方位使用指南
如何高效访问优质内容?bypass-paywalls-chrome-clean工具全方位使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,大量优质内容被…...
