最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡介

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

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

標(biāo)準(zhǔn)庫實現(xiàn)

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

源碼如下

// 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)

意思就是我們可以設(shè)置一個IP段例如 192.0.2.1/24 那么192.0.2.1就會在這個范圍內(nèi),而 192.0.3.1 不在這個范圍內(nèi)應(yīng)該做相應(yīng)的處理

代碼實現(xiàn)

package main

import (
	"fmt"
	"net"
	"strings"
)

func main() {
	ipWall := NewFireWall()
	// 設(shè)置可以訪問應(yīng)用的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在不在設(shè)置的規(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)應(yīng)用IP防火墻的文章就介紹到這了,更多相關(guān)Go IP防火墻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go和RabbitMQ構(gòu)建高效的消息隊列系統(tǒng)

    Go和RabbitMQ構(gòu)建高效的消息隊列系統(tǒng)

    本文主要介紹了使用Go語言和RabbitMQ搭建一個簡單的消息隊列系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Golang import本地包和導(dǎo)入問題相關(guān)詳解

    Golang import本地包和導(dǎo)入問題相關(guān)詳解

    這篇文章主要介紹了Golang import本地包和導(dǎo)入問題相關(guān)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Golang filepath包常用函數(shù)詳解

    Golang filepath包常用函數(shù)詳解

    本文介紹與文件路徑相關(guān)包,該工具包位于path/filepath中,該包試圖與目標(biāo)操作系統(tǒng)定義的文件路徑兼容。本文介紹一些常用函數(shù),如獲取文件絕對路徑,獲取文件名或目錄名、遍歷文件、分割文件路徑、文件名模式匹配等函數(shù),并給具體示例進(jìn)行說明
    2023-02-02
  • 在ubuntu下安裝go開發(fā)環(huán)境的全過程

    在ubuntu下安裝go開發(fā)環(huán)境的全過程

    Go語言是谷歌公司開發(fā)的編程語言,雖然安裝和配置go很簡單,但是很多初學(xué)者在第一次安裝go環(huán)境時會遇到各種坑,下面這篇文章主要給大家介紹了關(guān)于在ubuntu下安裝go開發(fā)環(huán)境的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • golang與pgsql交互的實現(xiàn)

    golang與pgsql交互的實現(xiàn)

    本文主要介紹了golang與pgsql交互的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Golang字符串的拼接方法匯總

    Golang字符串的拼接方法匯總

    字符串拼接在日常開發(fā)中是很常見的需求,今天我們來探討下如何用golang來實現(xiàn)字符串的拼接
    2018-10-10
  • Golang 實現(xiàn)分片讀取http超大文件流和并發(fā)控制

    Golang 實現(xiàn)分片讀取http超大文件流和并發(fā)控制

    這篇文章主要介紹了Golang 實現(xiàn)分片讀取http超大文件流和并發(fā)控制,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言使用讀寫OPC詳解

    Go語言使用讀寫OPC詳解

    這篇文章主要介紹了Go語言使用讀寫OPC詳解,圖文講解的很清晰,有感興趣的同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • Golang?range?slice?與range?array?之間的區(qū)別

    Golang?range?slice?與range?array?之間的區(qū)別

    這篇文章主要介紹了Golang?range?slice?與range?array?之間的區(qū)別,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Go語言調(diào)用其它程序并獲得程序輸出的方法

    Go語言調(diào)用其它程序并獲得程序輸出的方法

    這篇文章主要介紹了Go語言調(diào)用其它程序并獲得程序輸出的方法,實例分析了Go調(diào)用cmd程序的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論

海门市| 张家界市| 左贡县| 南平市| 西吉县| 中西区| 临西县| 安国市| 望都县| 兴城市| 芮城县| 论坛| 赤峰市| 霍州市| 石嘴山市| 奎屯市| 上林县| 新宁县| 南康市| 邢台市| 山阳县| 伊川县| 河津市| 册亨县| 宝丰县| 四平市| 观塘区| 祁连县| 乡城县| 内乡县| 山西省| 大兴区| 惠东县| 葫芦岛市| 鄯善县| 璧山县| 高安市| 财经| 巴中市| 黑龙江省| 垣曲县|