mirror of
https://github.com/oneclickvirt/basics.git
synced 2025-10-07 09:31:37 +08:00
158 lines
4.5 KiB
Go
158 lines
4.5 KiB
Go
package network
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/oneclickvirt/basics/model"
|
|
"github.com/oneclickvirt/basics/network/baseinfo"
|
|
"github.com/oneclickvirt/basics/network/ipv6"
|
|
. "github.com/oneclickvirt/defaultset"
|
|
)
|
|
|
|
// sortAndTranslateText 对原始文本进行排序和翻译
|
|
// func sortAndTranslateText(orginList []string, language string, fields []string) string {
|
|
// var result string
|
|
// for _, key := range fields {
|
|
// var displayKey string
|
|
// if language == "zh" {
|
|
// displayKey = model.TranslationMap[key]
|
|
// if displayKey == "" {
|
|
// displayKey = key
|
|
// }
|
|
// } else {
|
|
// displayKey = key
|
|
// }
|
|
// for _, line := range orginList {
|
|
// if strings.Contains(line, key) {
|
|
// if displayKey == key {
|
|
// result = result + line + "\n"
|
|
// } else {
|
|
// result = result + strings.ReplaceAll(line, key, displayKey) + "\n"
|
|
// }
|
|
// break
|
|
// }
|
|
// }
|
|
// }
|
|
// return result
|
|
// }
|
|
|
|
// processPrintIPInfo 处理IP信息
|
|
func processPrintIPInfo(ipVersion, language string, ipResult *model.IpInfo) string {
|
|
var info string
|
|
var headASNString, headLocationString string
|
|
if ipVersion == "ipv4" {
|
|
headASNString = " IPV4 ASN : "
|
|
headLocationString = " IPV4 Location : "
|
|
} else if ipVersion == "ipv6" {
|
|
headASNString = " IPV6 ASN : "
|
|
headLocationString = " IPV6 Location : "
|
|
}
|
|
// 处理ASN信息
|
|
if ipResult.ASN != "" || ipResult.Org != "" {
|
|
info += headASNString
|
|
if ipResult.ASN != "" {
|
|
info += "AS" + ipResult.ASN
|
|
if ipResult.Org != "" {
|
|
info += " "
|
|
}
|
|
}
|
|
info += ipResult.Org + "\n"
|
|
}
|
|
// 处理位置信息
|
|
if ipResult.City != "" || ipResult.Region != "" || ipResult.Country != "" {
|
|
info += headLocationString
|
|
if ipResult.City != "" {
|
|
info += ipResult.City + " / "
|
|
}
|
|
if ipResult.Region != "" {
|
|
info += ipResult.Region + " / "
|
|
}
|
|
if ipResult.Country != "" {
|
|
info += ipResult.Country
|
|
}
|
|
info += "\n"
|
|
}
|
|
// 处理 IPv4 的活跃IP信息
|
|
if ipVersion == "ipv4" && ipResult.Ip != "" && baseinfo.MaskIP(ipResult.Ip) != "" {
|
|
if model.EnableLoger {
|
|
InitLogger()
|
|
defer Logger.Sync()
|
|
}
|
|
subnetCidrIp := baseinfo.MaskIP(ipResult.Ip)
|
|
subnetActive, subnetTotal, err1 := baseinfo.GetActiveIpsCount(subnetCidrIp, 24)
|
|
cidrIp, cidrPrefix := baseinfo.GetCIDRPrefix(ipResult.Ip)
|
|
prefixActive, prefixTotal, err2 := baseinfo.GetActiveIpsCount(cidrIp, cidrPrefix)
|
|
if (err1 == nil && subnetActive > 0 && subnetTotal > 0) || (err2 == nil && prefixActive > 0 && prefixTotal > 0) {
|
|
info += " IPV4 Active IPs :"
|
|
if err1 == nil {
|
|
info += fmt.Sprintf(" %d/%d (subnet /24)", subnetActive, subnetTotal)
|
|
} else {
|
|
if model.EnableLoger {
|
|
Logger.Info(fmt.Sprintf("subnet /24 data unavailable: %s", err1.Error()))
|
|
}
|
|
}
|
|
if err2 == nil {
|
|
if cidrPrefix != 24 {
|
|
info += fmt.Sprintf(" %d/%d (prefix /%d)", prefixActive, prefixTotal, cidrPrefix)
|
|
}
|
|
} else {
|
|
if model.EnableLoger {
|
|
Logger.Info(fmt.Sprintf("prefix data unavailable: %s", err2.Error()))
|
|
}
|
|
}
|
|
info += "\n"
|
|
}
|
|
}
|
|
// 处理 Ipv6 的Mask信息
|
|
if ipVersion == "ipv6" && ipResult.Ip != "" {
|
|
maskInfoV6, err := ipv6.GetIPv6Mask(ipResult.Ip, language)
|
|
if err == nil {
|
|
info += maskInfoV6
|
|
}
|
|
}
|
|
return info
|
|
}
|
|
|
|
// NetworkCheck 查询网络信息
|
|
// checkType 可选 both ipv4 ipv6
|
|
// language 暂时仅支持 en 或 zh
|
|
func NetworkCheck(checkType string, enableSecurityCheck bool, language string) (string, string, error) {
|
|
if model.EnableLoger {
|
|
InitLogger()
|
|
defer Logger.Sync()
|
|
}
|
|
var ipInfo string
|
|
if checkType == "both" {
|
|
ipInfoV4Result, _, ipInfoV6Result, _, err := baseinfo.RunIpCheck("both")
|
|
if err != nil && model.EnableLoger {
|
|
Logger.Info(err.Error())
|
|
}
|
|
if ipInfoV4Result != nil {
|
|
ipInfo += processPrintIPInfo("ipv4", language, ipInfoV4Result)
|
|
}
|
|
if ipInfoV6Result != nil {
|
|
ipInfo += processPrintIPInfo("ipv6", language, ipInfoV6Result)
|
|
}
|
|
return ipInfo, "", nil
|
|
} else if checkType == "ipv4" {
|
|
ipInfoV4Result, _, _, _, err := baseinfo.RunIpCheck("ipv4")
|
|
if err != nil && model.EnableLoger {
|
|
Logger.Info(err.Error())
|
|
}
|
|
if ipInfoV4Result != nil {
|
|
ipInfo += processPrintIPInfo("ipv4", language, ipInfoV4Result)
|
|
}
|
|
return ipInfo, "", nil
|
|
} else if checkType == "ipv6" {
|
|
_, _, ipInfoV6Result, _, err := baseinfo.RunIpCheck("ipv6")
|
|
if err != nil && model.EnableLoger {
|
|
Logger.Info(err.Error())
|
|
}
|
|
if ipInfoV6Result != nil {
|
|
ipInfo += processPrintIPInfo("ipv6", language, ipInfoV6Result)
|
|
}
|
|
return ipInfo, "", nil
|
|
}
|
|
return "", "", fmt.Errorf("wrong in NetworkCheck")
|
|
}
|