亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于Go語言實現(xiàn)應用IP防火墻

 更新時間:2023年11月21日 13:54:09   作者:shura1014  
在公司里面經(jīng)常會聽到某應用有安全漏洞問題,沒有做安全加固,IP防火墻就是一個典型的安全加固解決方案,下面我們就來學習一下如何使用go語言實現(xiàn)IP防火墻吧

簡介

在公司里面經(jīng)常會聽到某應用有安全漏洞問題,沒有做安全加固,IP防火墻就是一個典型的安全加固解決方案,只允許指定的ip段訪問應用,一般是內(nèi)網(wǎng)ip

本文主要講解go語言如何實現(xiàn)ip防火墻

標準庫實現(xiàn)

其實go的net包以及有相應的實現(xiàn),我們只需要簡單應用即可

源碼如下

// 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就會在這個范圍內(nèi),而 192.0.3.1 不在這個范圍內(nèi)應該做相應的處理

代碼實現(xiàn)

package main

import (
	"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"))

}

// 定義防火墻,保存規(guī)則nodes

type FireWall struct {
	nodes []net.IPNet
}

func NewFireWall() *FireWall {
	return &FireWall{
		nodes: make([]net.IPNet, 0),
	}
}

// 添加規(guī)則

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 representation
			parsedIP = 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在不在設置的規(guī)則里

func (b *FireWall) Check(ip string) bool {
	for _, cidr := range b.nodes {
		remoteIP := net.ParseIP(ip)
		if cidr.Contains(remoteIP) {
			return true
		}
	}
	return false
}

執(zhí)行以上代碼,輸出

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

以上就是ip防火墻的實現(xiàn)了,在gin框架里也是這么實現(xiàn)的

到此這篇關(guān)于基于Go語言實現(xiàn)應用IP防火墻的文章就介紹到這了,更多相關(guān)Go IP防火墻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang的select多路復用及channel使用操作

    Golang的select多路復用及channel使用操作

    這篇文章主要介紹了Golang的select多路復用及channel使用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 如何解決goland,idea全局搜索快捷鍵失效問題

    如何解決goland,idea全局搜索快捷鍵失效問題

    這篇文章主要介紹了如何解決goland,idea全局搜索快捷鍵失效問題,快捷鍵失效,可能是快捷鍵沖突,也或者是快捷鍵被修改成其他了。在settings下查看快捷鍵是否被修改,下文詳細介紹需要的朋友可以參考下
    2022-04-04
  • 詳解在Go語言單元測試中如何解決文件依賴問題

    詳解在Go語言單元測試中如何解決文件依賴問題

    現(xiàn)如今的?Web?應用程序往往采用?RESTful?API?接口形式對外提供服務,后端接口直接向前端返回?HTML?文件的情況越來越少,所以在程序中操作文件的場景也變少了,在編寫單元測試時,文件就成了被測試代碼的外部依賴,本文就來講解下測試過程中如何解決文件外部依賴問題
    2023-08-08
  • go語言中decimal的用法詳解

    go語言中decimal的用法詳解

    本文主要介紹了go語言中decimal的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Go實現(xiàn)自動解壓縮包以及讀取docx/doc文件內(nèi)容詳解

    Go實現(xiàn)自動解壓縮包以及讀取docx/doc文件內(nèi)容詳解

    在開發(fā)過程中,我們常常需要處理壓縮包和文檔文件。本文將介紹如何使用Go語言自動解壓縮包和讀取docx/doc文件,需要的可以參考一下
    2023-03-03
  • Go語言中JWT的創(chuàng)建和解析操作詳解

    Go語言中JWT的創(chuàng)建和解析操作詳解

    JWT的全名是Json web token,是為了在網(wǎng)絡應用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標準,這篇文章主要介紹了在Go語言中JWT的創(chuàng)建和解析操作,感興趣的同學可以參考下文
    2023-05-05
  • Go語言并發(fā)之Sync包的6個關(guān)鍵概念總結(jié)

    Go語言并發(fā)之Sync包的6個關(guān)鍵概念總結(jié)

    這篇文章主要為大家詳細介紹了Go語言并發(fā)中Sync包的6個關(guān)鍵概念,文中的示例代碼講解詳細,對我們深入學習Go語言有一定的幫助,需要的可以參考一下
    2023-05-05
  • Go雪花算法的作用領域及實現(xiàn)方法示例

    Go雪花算法的作用領域及實現(xiàn)方法示例

    這篇文章主要為大家介紹了Go雪花算法的作用領域及實現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Go每日一庫之dateparse處理時間

    Go每日一庫之dateparse處理時間

    不管什么時候,處理時間總是讓人頭疼的一件事情。今天要介紹的dateparse實現(xiàn)解析日期時間格式的字符串。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Golang算法問題之數(shù)組按指定規(guī)則排序的方法分析

    Golang算法問題之數(shù)組按指定規(guī)則排序的方法分析

    這篇文章主要介紹了Golang算法問題之數(shù)組按指定規(guī)則排序的方法,結(jié)合實例形式分析了Go語言數(shù)組排序相關(guān)算法原理與操作技巧,需要的朋友可以參考下
    2017-02-02

最新評論