go語言指定出口ip go 接口實現(xiàn)

高恪多播怎么固定出口ip

負載均衡里設置。

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比荔城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式荔城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋荔城地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。

高恪多播有時候會提示網(wǎng)絡不穩(wěn),網(wǎng)絡會一直變化,所以要去負載均衡里設置。

go程序調(diào)用本機不同ip

獲取本機ip的方法:

//獲取ip

func externalIP() (net.IP, error) {

ifaces, err := net.Interfaces()

if err != nil {

return nil, err

}

for _, iface := range ifaces {

if iface.Flagsnet.FlagUp == 0 {

continue // interface down

}

if iface.Flagsnet.FlagLoopback != 0 {

continue // loopback interface

}

addrs, err := iface.Addrs()

if err != nil {

return nil, err

}

for _, addr := range addrs {

ip := getIpFromAddr(addr)

if ip == nil {

continue

}

return ip, nil

}

}

return nil, errors.New("connected to the network?")

}

//獲取ip

func getIpFromAddr(addr net.Addr) net.IP {

var ip net.IP

switch v := addr.(type) {

case *net.IPNet:

ip = v.IP

case *net.IPAddr:

ip = v.IP

}

if ip == nil || ip.IsLoopback() {

return nil

}

ip = ip.To4()

if ip == nil {

return nil // not an ipv4 address

}

return ip

}

調(diào)用:

func main() {

ip, err := externalIP()

if err != nil {

fmt.Println(err)

}

fmt.Printf(ip.String())

}

結(jié)果:

導致獲取出來的IP可能不一定是想要的。需要通過判斷net.FlagUp標志進行確... 才能調(diào)用stop接口,不然有幾率崩潰,asio的關(guān)閉流程的線程安全性,貌似需要使...

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

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

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

//檢驗Mac和內(nèi)網(wǎng)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("示授權(quán)的應用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("示授權(quán)的應用IP,請聯(lián)系")

}

return nil

}

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

多IP情況下指定具體的出口IP

在項目中遇到服務器有兩個IP(一個真實IP一個VIP),然后出口IP必須為VIP的情況。

針對這樣的需求有2種解決方案。

1、修改 ip route

通過systemd的方式在開機的時候執(zhí)行腳本來修改ip route

a、先查看現(xiàn)有的ip route

執(zhí)行 ip route,然后可以看到類似的結(jié)果:

default via 10.100.103.1 dev ens18 proto static metric 100

10.100.103.0/24 dev ens18 proto kernel scope link src 10.100.103.222 metric 100

172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

b、根據(jù)獲取到的信息編寫執(zhí)行腳本,可以把腳本放到/home目錄下

腳本完整路徑:

/home/network.sh

腳本內(nèi)容(其中10.101.19.1要改為上一步中獲取到的網(wǎng)關(guān)地址):

ip route replace default via 10.101.19.1 dev ens192 src 10.101.19.104

c、給腳本可執(zhí)行權(quán)限

d、添加一個systemd服務

服務完整路徑:

/etc/systemd/system/network-trans.service

服務內(nèi)容:

e、啟用腳本

systemctl enable network-trans.service

systemctl start network-trans.service

f、檢查運行結(jié)果

如果是loaded狀態(tài)說明執(zhí)行成功,然后看一下ip route,會多出一行類似的,如果有就可以了。

default via 10.101.19.1 dev ens192 src 10.101.19.104

2、增加iptables規(guī)則

這個方案需要已經(jīng)安裝了iptables服務,并且需要關(guān)閉firewalld服務,具體看你那邊的情況是否允許,具體步驟如下:

a、啟動iptables服務,并設置為開機啟動

b、把firewalld禁用

c、添加規(guī)則并持久化保存

d、查看 /etc/sysconfig/iptables,確認上面的規(guī)則已經(jīng)添加成功

文章標題:go語言指定出口ip go 接口實現(xiàn)
本文網(wǎng)址:http://bm7419.com/article30/ddejdpo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、做網(wǎng)站移動網(wǎng)站建設、定制開發(fā)、網(wǎng)站設計、網(wǎng)站改版

廣告

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

網(wǎng)站建設網(wǎng)站維護公司