負載均衡里設置。
成都創(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)絡會一直變化,所以要去負載均衡里設置。
獲取本機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)閉流程的線程安全性,貌似需要使...
實際業(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一個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)