Fetch the repository succeeded.
package model
import (
"fmt"
"gitee.com/liumou_site/gns/ip"
"gitee.com/liumou_site/logger"
"strings"
)
// GetIp 获取IP地址信息
// 该函数会依次调用getIp6和getIp4方法,分别获取IPv6和IPv4地址信息。
// 该函数没有参数和返回值。
func (i *IP) GetIp() {
// 获取IPv6地址信息
i.getIp6()
// 获取IPv4地址信息
i.getIp4()
}
// getIp4 方法用于获取并设置IPv4地址信息
func (i *IP) getIp4() {
// 检查IP类型是否为"A"或"ALL",如果不是则直接返回
if strings.EqualFold(i.IpType, "A") || strings.EqualFold(i.IpType, "ALL") {
if i.Debug {
logger.Debug("正在获取ipv4地址")
}
} else {
return
}
// 初始化Ip4Exists为false,表示尚未获取到IPv4地址
i.Ip4Exists = false
// 从指定API获取IPv4地址
ipv4, err := ip.GetPublicIpv4()
// 如果获取过程中发生错误,记录错误信息并返回
if err != nil {
i.Err = err
return
}
// 清除之前的错误信息
i.Err = nil
// 设置获取到的IPv4地址
i.IP4 = ipv4
// 设置Ip4Exists为true,表示已成功获取IPv4地址
i.Ip4Exists = true
}
// getIp6尝试获取IPv6地址,并根据条件更新实例的相应字段。
// 此函数首先检查实例的IpType是否为"AAAA"或"ALL",如果是,则尝试获取IPv6地址。
// 如果SetV6被设置为true,表示正在获取IPv6地址。
// 如果获取IPv6地址成功,更新Ip、IP6字段,并将Ip6Exists设置为true。
// 如果获取IPv6地址失败或IpType不符合条件,则不进行任何操作并直接返回。
func (i *IP) getIp6() {
// 初始化Ip6Exists为false,表示尚未获取到IPv6地址
i.Ip6Exists = false
// 检查IP类型是否为"AAAA"或"ALL",如果不是则直接返回
if strings.EqualFold(i.IpType, "AAAA") || strings.EqualFold(i.IpType, "ALL") {
if i.Debug {
logger.Debug("正在获取ipv6地址")
}
} else {
return
}
// 设置SetV6为true,表示正在获取IPv6地址
i.SetV6 = true
// 根据是否指定了网络接口来获取IPv6地址
v6, err := ip.GetPublicIpv6()
if i.SpecifyNetworkCard {
v6, err = ip.GetPublicIpv6Eth(i.SpecifyNetworkCardName)
}
if err != nil {
i.Err = err
return
}
// 如果成功获取到IPv6地址,则更新相关字段
if len(v6) == 0 {
i.Err = fmt.Errorf("获取到的IPV6地址为空")
return
}
i.Ip = string(v6[0])
i.IP6 = i.Ip
i.Err = nil
i.Ip6Exists = true
if i.Debug {
logger.Debug("通过正则匹配IPV6地址成功", i.Ip)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。