go語言修改ip go語言配置

Golang 綁定mac和ip地址,限制服務器

實際業(yè)務:go 二進制文件在私有化部署中,需要對客戶的服務器mac和ip進行綁定,系統(tǒng)只能運行在綁定的服務器上。把mac和ip地址配置到config中。

成都創(chuàng)新互聯(lián)公司主營無極網站建設的網絡公司,主營網站建設方案,APP應用開發(fā),無極h5小程序開發(fā)搭建,無極網站營銷推廣歡迎無極等地區(qū)企業(yè)咨詢

運行效果:系統(tǒng)可正常編譯,正常訪問,在用戶Auth接口進行核對。

//檢驗Mac和內網IP,測試環(huán)境不做校驗

func (c *CommonBase)CheckMacAndIp()error {

ipCfg :=g.Cfg().GetString("machine.Ipaddr")

macCfg :=g.Cfg().GetString("machine.Macip")

if ipCfg =="127.0.0.1" {

return nil

}

macArray,_ :=gipv4.GetMacArray()

if len(macArray) ==0 {

return gerror.New("mac地址獲取失敗")

}

if garray.NewStrArrayFrom(macArray).Contains(macCfg) ==false {

return gerror.New("示授權的應用MAC,請聯(lián)系")

}

ipArray,_ :=gipv4.GetIpArray()

ipIntranetArray,_ :=gipv4.GetIntranetIpArray()

if len(ipArray) ==0 len(ipIntranetArray) ==0 {

return gerror.New("ip地址獲取失敗")

}

if garray.NewStrArrayFrom(ipArray).Merge(ipIntranetArray).Contains(ipCfg) ==false {

return gerror.New("示授權的應用IP,請聯(lián)系")

}

return nil

}

項目使用GoFrame框架1.6??紤]到客戶可能會對內存數據做分析破解,可以把mac和ip地址做AES加密。

怎樣用go語言獲取本地IP地址

#include #include #pragma comment(lib,"ws2_32.lib") // 靜態(tài)庫 void findIP(char *ip, int size) { WORD v = MAKEWORD(1, 1); WSADATA wsaData; WSAStartup(v, wsaData); // 加載套接字庫 struct hostent *phostinfo = gethostbyname(""); c...

go語言實現一個簡單的簡單網關

網關=反向代理+負載均衡+各種策略,技術實現也有多種多樣,有基于 nginx 使用 lua 的實現,比如 openresty、kong;也有基于 zuul 的通用網關;還有就是 golang 的網關,比如 tyk。

這篇文章主要是講如何基于 golang 實現一個簡單的網關。

轉自: troy.wang/docs/golang/posts/golang-gateway/

整理:go語言鐘文文檔:

啟動兩個后端 web 服務(代碼)

這里使用命令行工具進行測試

具體代碼

直接使用基礎庫 httputil 提供的NewSingleHostReverseProxy即可,返回的reverseProxy對象實現了serveHttp方法,因此可以直接作為 handler。

具體代碼

director中定義回調函數,入參為*http.Request,決定如何構造向后端的請求,比如 host 是否向后傳遞,是否進行 url 重寫,對于 header 的處理,后端 target 的選擇等,都可以在這里完成。

director在這里具體做了:

modifyResponse中定義回調函數,入參為*http.Response,用于修改響應的信息,比如響應的 Body,響應的 Header 等信息。

最終依舊是返回一個ReverseProxy,然后將這個對象作為 handler 傳入即可。

參考 2.2 中的NewSingleHostReverseProxy,只需要實現一個類似的、支持多 targets 的方法即可,具體實現見后面。

作為一個網關服務,在上面 2.3 的基礎上,需要支持必要的負載均衡策略,比如:

隨便 random 一個整數作為索引,然后取對應的地址即可,實現比較簡單。

具體代碼

使用curIndex進行累加計數,一旦超過 rss 數組的長度,則重置。

具體代碼

輪詢帶權重,如果使用計數遞減的方式,如果權重是5,1,1那么后端 rs 依次為a,a,a,a,a,b,c,a,a,a,a…,其中 a 后端會瞬間壓力過大;參考 nginx 內部的加權輪詢,或者應該稱之為平滑加權輪詢,思路是:

后端真實節(jié)點包含三個權重:

操作步驟:

具體代碼

一致性 hash 算法,主要是用于分布式 cache 熱點/命中問題;這里用于基于某 key 的 hash 值,路由到固定后端,但是只能是基本滿足流量綁定,一旦后端目標節(jié)點故障,會自動平移到環(huán)上最近的那么個節(jié)點。

實現:

具體代碼

每一種不同的負載均衡算法,只需要實現添加以及獲取的接口即可。

然后使用工廠方法,根據傳入的參數,決定使用哪種負載均衡策略。

具體代碼

作為網關,中間件必不可少,這類包括請求響應的模式,一般稱作洋蔥模式,每一層都是中間件,一層層進去,然后一層層出來。

中間件的實現一般有兩種,一種是使用數組,然后配合 index 計數;一種是鏈式調用。

具體代碼

如何使用Go語言是操作Docker

Docker 提供了一個與 Docker 守護進程交互的 API (稱為Docker Engine API),我們可以使用官方提供的 Go 語言的 SDK 進行構建和擴展 Docker 應用程序和解決方案。

轉自:

整理:地鼠文檔

通過下面的命令就可以安裝 SDK 了:

該部分會介紹如何使用 Golang + Docker API 進行管理本地的 Docker。

第一個例子將展示如何運行容器,相當于 docker run docker.io/library/alpine echo "hello world" :

還可以在后臺運行容器,相當于 docker run -d bfirsh/reticulate-splines :

列出正在運行的容器,就像使用 docker ps 一樣:

如果是 docker ps -a ,我們可以通過修改 types.ContainerListOptions 中的 All 屬性達到這個目的:

通過上面的例子,我們可以獲取容器的列表,所以在這個案例中,我們可以去停止所有正在運行的容器。

通過指定容器的 ID,我們可以獲取對應 ID 的容器的日志:

獲取本地所有的鏡像,相當于 docker image ls 或 docker images :

拉取指定鏡像,相當于 docker pull alpine :

除了公開的鏡像,我們平時還會用到一些私有鏡像,可以是 DockerHub 上私有鏡像,也可以是自托管的鏡像倉庫,比如 harbor 。這個時候,我們需要提供對應的憑證才可以拉取鏡像。

值得注意的是:在使用 Docker API 的 Go SDK 時,憑證是以明文的方式進行傳輸的,所以如果是自建的鏡像倉庫,請務必使用 HTTPS !

我們可以將一個已有的容器通過 commit 保存成一個鏡像:

當然,除了可以管理本地的 Docker , 我們同樣也可以通過使用 Golang + Docker API 管理遠程的 Docker 。

默認 Docker 是通過非網絡的 Unix 套接字運行的,只能夠進行本地通信( /var/run/docker.sock ),是不能夠直接遠程連接 Docker 的。

我們需要編輯配置文件 /etc/docker/daemon.json ,并修改以下內容(把 192.168.59.3 改成你自己的 IP 地址),然后重啟 Docker :

創(chuàng)建 client 的時候需要指定遠程 Docker 的地址,這樣就可以像管理本地 Docker 一樣管理遠程的 Docker 了:

現在已經有很多可以管理 Docker 的產品,它們便是這樣進行實現的,比如: portainer 。

Golang--獲取本地IP

Golang獲取本地IP地址方法,目前了解兩種,記錄如下:

方法1:

Golang 網絡編程絲綢之路 - TCP/UDP 地址解析

TL;DR 在使用 Golang 編寫 TCP/UDP socket 的時候,第一步做的就是地址解析。

該函數返回的地址包含的信息如下:

TCPAddr 里, IP 既可以是 IPv4 地址,也可以是 IPv6 地址。 Port 就是端口了。 Zone 是 IPv6 本地地址所在的區(qū)域。

從返回結果看該函數的參數, network 指 address 的網絡類型; address 指要解析的地址,會從中解析出我們想要的 IP , Port 和 Zone 。

從源碼中可以看出,參數 network 只能是如下四個值,否則會得到一個錯誤。

解析過程跟 ResolveTCPAddr 的一樣,不過得到的是 *UDPAddr 。

UDPAddr 包含的信息如下:

分享標題:go語言修改ip go語言配置
文章地址:http://muchs.cn/article28/doscjcp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供動態(tài)網站服務器托管、GoogleApp開發(fā)品牌網站設計、域名注冊

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網頁設計公司