网站建设资讯

NEWS

网站建设资讯

go语言指定出口ip go 接口实现

高恪多播怎么固定出口ip

负载均衡里设置。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比荔城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式荔城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖荔城地区。费用合理售后完善,10余年实体公司更值得信赖。

高恪多播有时候会提示网络不稳,网络会一直变化,所以要去负载均衡里设置。

go程序调用本机不同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

}

调用:

func main() {

ip, err := externalIP()

if err != nil {

fmt.Println(err)

}

fmt.Printf(ip.String())

}

结果:

导致获取出来的IP可能不一定是想要的。需要通过判断net.FlagUp标志进行确... 才能调用stop接口,不然有几率崩溃,asio的关闭流程的线程安全性,貌似需要使...

Golang 绑定mac和ip地址,限制服务器

实际业务:go 二进制文件在私有化部署中,需要对客户的服务器mac和ip进行绑定,系统只能运行在绑定的服务器上。把mac和ip地址配置到config中。

运行效果:系统可正常编译,正常访问,在用户Auth接口进行核对。

//检验Mac和内网IP,测试环境不做校验

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,请联系")

}

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,请联系")

}

return nil

}

项目使用GoFrame框架1.6。考虑到客户可能会对内存数据做分析破解,可以把mac和ip地址做AES加密。

多IP情况下指定具体的出口IP

在项目中遇到服务器有两个IP(一个真实IP一个VIP),然后出口IP必须为VIP的情况。

针对这样的需求有2种解决方案。

1、修改 ip route

通过systemd的方式在开机的时候执行脚本来修改ip route

a、先查看现有的ip route

执行 ip route,然后可以看到类似的结果:

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、根据获取到的信息编写执行脚本,可以把脚本放到/home目录下

脚本完整路径:

/home/network.sh

脚本内容(其中10.101.19.1要改为上一步中获取到的网关地址):

ip route replace default via 10.101.19.1 dev ens192 src 10.101.19.104

c、给脚本可执行权限

d、添加一个systemd服务

服务完整路径:

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

服务内容:

e、启用脚本

systemctl enable network-trans.service

systemctl start network-trans.service

f、检查运行结果

如果是loaded状态说明执行成功,然后看一下ip route,会多出一行类似的,如果有就可以了。

default via 10.101.19.1 dev ens192 src 10.101.19.104

2、增加iptables规则

这个方案需要已经安装了iptables服务,并且需要关闭firewalld服务,具体看你那边的情况是否允许,具体步骤如下:

a、启动iptables服务,并设置为开机启动

b、把firewalld禁用

c、添加规则并持久化保存

d、查看 /etc/sysconfig/iptables,确认上面的规则已经添加成功


文章名称:go语言指定出口ip go 接口实现
文章起源:http://njwzjz.com/article/ddejdpo.html