Go语言中实现应用IP防火墙

简介

在公司里面经常会听到某应用有安全漏洞问题,没有做安全加固,IP防火墙就是一个典型的安全加固解决方案,只允许指定的ip段访问应用,一般是内网ip

本文主要讲解go语言如何实现ip防火墙

标准库实现

其实go的net包以及有相应的实现,我们只需要简单应用即可

源码如下

// ParseCIDR parses s as a CIDR notation IP address and prefix length,
// like "192.0.2.0/24" or "2001:db8::/32", as defined in
// RFC 4632 and RFC 4291.
//
// It returns the IP address and the network implied by the IP and
// prefix length.
// For example, ParseCIDR("192.0.2.1/24") returns the IP address
// 192.0.2.1 and the network 192.0.2.0/24.
func ParseCIDR(s string) (IP, *IPNet, error)

意思就是我们可以设置一个IP段例如 192.0.2.1/24 那么192.0.2.1就会在这个范围内,而 192.0.3.1 不在这个范围内应该做相应的处理

代码实现

package mainimport ("fmt""net""strings"
)func main() {ipWall := NewFireWall()// 设置可以访问应用的ip段ipWall.ParseNode("127.0.0.1")ipWall.ParseNode("192.0.2.1/24")ipWall.ParseNode("2001:db8::/32") // 可以支持ipv6// 测试fmt.Println("127.0.0.1", ipWall.Check("127.0.0.1"))fmt.Println("192.0.2.10", ipWall.Check("192.0.2.10"))fmt.Println("192.0.3.10", ipWall.Check("192.0.3.10"))fmt.Println("2001:db8::1", ipWall.Check("2001:db8::1"))fmt.Println("2001:db9::1", ipWall.Check("2001:db9::1"))}// 定义防火墙,保存规则nodestype FireWall struct {nodes []net.IPNet
}func NewFireWall() *FireWall {return &FireWall{nodes: make([]net.IPNet, 0),}
}// 添加规则func (b *FireWall) ParseNode(line string) {if !strings.Contains(line, "/") {parsedIP := net.ParseIP(line)if ipv4 := parsedIP.To4(); ipv4 != nil {// return ip in a 4-byte representationparsedIP = ipv4}if parsedIP != nil {switch len(parsedIP) {case net.IPv4len:line += "/32"case net.IPv6len:line += "/128"}}}_, cidrNet, err := net.ParseCIDR(line)if err == nil {b.nodes = append(b.nodes, *cidrNet)}
}// 检查某个ip在不在设置的规则里func (b *FireWall) Check(ip string) bool {for _, cidr := range b.nodes {remoteIP := net.ParseIP(ip)if cidr.Contains(remoteIP) {return true}}return false
}

执行以上代码,输出

127.0.0.1 true
192.0.2.10 true
192.0.3.10 false
2001:db8::1 true
2001:db9::1 false

以上就是ip防火墙的实现了,在gin框架里也是这么实现的


欢迎关注,学习不迷路!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能和AR/VR:AI在AR和VR中扮演什么角色?行业应用有哪些?

增强现实技术和虚拟现实技术(AR/VR)发展前景广阔,备受各大企业关注。事实上,近四分之三的行业领导者表示,他们预计这些沉浸式技术将于未来五年内成为主流。高盛公司报告称,到2025年,AR/VR行业值…

Golang版本处理Skywalking Trace上报数据

Tips: 中间记录了解决问题的过程,如不感兴趣可直接跳至结尾 首先去es里查询skywalking trace的元数据 可以拿到一串base64加密后的data_binary(直接解密不能用,会有乱码,可参考https://github.com/apache/skywalking/issues/7423) 对data_b…

图解系列--密钥,随机数,应用技术

密钥 1.生成密钥 1.1.用随机数生成密钥 密码学用途的伪随机数生成器必须是专门针对密码学用途而设计的。 1.2.用口令生成密钥 一般都是将口令输入单向散列函数,然后将得到的散列值作为密钥使用。 在使用口令生成密钥时,为了防止字典攻击,需要…

笔记本只使用Linux是什么体验?

笔记本只使用Linux是什么体验? 之后安了Windows双系统之后也不怎么想再进Windows了。 开发环境就不用说了,Linux下配各种开发环境都方便的多,当然你要用 vs 那还是乖乖回 Windows 吧。 最近很多小伙伴找我,说想要一些Linux的资…

详解Java的static关键字

文章目录 🎄静态方法🌺静态方法和非静态方法对比🛸静态方法实例🛸非静态方法实例 🌹static关键字⭐static变量⭐static代码块 🎄静态方法 不依赖于对象实例:静态方法不需要依赖于任何对象实例&…

java的继承特性和方法重写

java的继承特性和方法重写 Java的继承特性是一种面向对象编程的重要概念,它允许我们基于已有的类创建新的类,并且保留了已有的类的一些特性。这是通过使用"继承"这个关键词来实现的,新创建的类称为子类(subclass&#…

Spark---核心介绍

一、Spark核心 1、RDD 1)、概念: RDD(Resilient Distributed Datest),弹性分布式数据集。 2)、RDD的五大特性: 1、RDD是由一系列的partition组成的 2、函数是作用在每一个partition(split…

项目上下基线检查达梦

** 配置账户登录失败处理功能,限制非法登录次数不小于5次(不含5次),锁定时间为30分钟以上。 ** 登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施; FAILED…

Linux 磁盘/分区/修复 命令

目录 1. lsblk(list block devices) 2. fdisk(fragment disk) 3. gdisk 4. mkfs(make filesystem) 5. df(display file-system disk space usage) 6. du 7. fsck(file-sy…

Android修行手册-POI操作Excel文档

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

从零开始学习typescript——变量

就像我们在学校学习语文、英文时候一样,最开始学习的是语法,要知道基础的结构。 图片中包含 变量、标识符、数据类型、运算符、字面量、表达式、控制语句等语法 变量 变量是使用给定的符号名在内存中申请存储地址,并且可以容纳某个值。 语…

多篇论文介绍-可变形卷积

01 具有双层路由注意力的 YOLOv8 道路场景目标检测方法 01 摘要: 随着机动车的数量不断增加,道路交通环境变得更复杂,尤其是光照变化以及复杂背景都会干扰目标检测算法的准确性和精度,同时道路场景下多变形态的目标也会给检测任务造成干扰&am…

浅谈低压绝缘监测及定位系统在海上石油平台的研究与应用

安科瑞 华楠 摘要:海上石油平台低压系统与陆地电力系统有很大区别,其属于中性点绝缘系统,在出现单相接地故障时,系统允许带故障正常运行2 h,保证海上重要电气设备不会立即关停。现以渤海某海上平台为例,其…

可上手 JVM 调优实战指南

文章目录 为什么要学 JVM一、JVM 整体布局二、Class 文件规范三、类加载模块四、执行引擎五、GC 垃圾回收1 、JVM内存布局2 、 JVM 有哪些主要的垃圾回收器?3 、分代垃圾回收工作机制 六、对 JVM 进行调优的基础思路七、 GC 情况分析实例八、最后总结 全程可上手JVM…

steam游戏找不到steam_api64.dll,分享三个有效的解决方法

在现代科技发展的时代,游戏已经成为了许多人生活中不可或缺的一部分。而Steam作为全球最大的数字发行平台之一,拥有着庞大的游戏库和活跃的用户群体。然而,在使用Steam时,有些用户可能会遇到Steam_api64.dll丢失的问题&#xff0c…

我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)

几何变换指的是将一幅图像映射到另一幅图像内的操作。 cv2.warpAffine:使用仿射变换矩阵对图像进行变换,可以实现平移、缩放和旋转等操作。cv2.warpPerspective:使用透视变换矩阵对图像进行透视变换,可以实现镜头校正、图像纠偏等…

Positive证书:最便宜的SSL证书

在当今数字化的时代,网上交易和信息传输已经成为我们生活中不可或缺的一部分。然而,随着网络犯罪的增加,确保在线信息的安全性变得尤为重要。Positive证书作为一种经济实惠的数字证书,在提供有效安全性的同时,为用户提…

Golang模块管理功能

文章目录 1. Golang 包管理1.1 GOPATH 包管理1.2 Go vendor 包管理1.3 Go modules包管理2. Go Modules 应用实践2.1 Go modules关键信息2.1.1 go mod 命令行2.1.2 配置代理服务2.2 创建项目2.3 获取依赖包2.4 运行项目1. Golang 包管理 1.1 GOPATH 包管理 第一阶段: Golang初…

C# Onnx 特征匹配 DeDoDe 检测,不描述---描述,不检测

目录 介绍 效果 模型信息 项目 代码 下载 介绍 github地址:https://github.com/Parskatt/DeDoDe DeDoDe 🎶 Detect, Dont Describe - Describe, Dont Detect, for Local Feature Matching The DeDoDe detector learns to detect 3D consisten…

Redis主从,缓存击穿,雪崩,哨兵等问题

Redis的性能管理: Redis的数据缓存在内存当中 INFO memory used_memory:853808 Redis中数据占用的内存 used_memory_rss:3715072 Redis向操作系统申请的内容 used_memory_peak:853808 Redis使用的内存的峰值 系统巡检:硬件巡检,数据库…