pet-house/core/helper/global/ip.go

86 lines
1.8 KiB
Go

package global
import (
"fmt"
"net"
"regexp"
"strings"
"time"
"pet-house.com/core/helper/arr"
)
func GetMacAddr() string {
if getMacAddrInterface() == nil {
return ""
}
addr := getMacAddrInterface().HardwareAddr.String()
if len(addr) > 0 {
addr = strings.ReplaceAll(addr, ":", "")
addr = strings.ToUpper(addr)
return addr
}
return ""
}
func getMacAddrInterface() *net.Interface {
netInterfaces, err := net.Interfaces()
if err != nil {
return nil
}
re, err := regexp.Compile(`^(ens|eth|waln|以太网|Ethernet)[0-9]*`)
if err != nil {
return nil
}
nameCheck := arr.NewCheckArrayType(0)
nameCheck.AddMutil("eth0", "waln0", "以太网", "Ethernet", "ens0")
for _, netInterface := range netInterfaces {
if nameCheck.Check(netInterface.Name) {
return &netInterface
}
}
for _, netInterface := range netInterfaces {
if re.MatchString(netInterface.Name) {
return &netInterface
}
}
return nil
}
func check(ip, network string) bool {
parseIp, subnet, err := net.ParseCIDR(network)
if err != nil {
return false
}
if ip == parseIp.String() {
return false
}
return subnet.Contains(net.ParseIP(ip))
}
func LocalIP(network string) string {
ip := ""
if addrs, err := net.InterfaceAddrs(); err == nil {
for i, addr := range addrs {
i += 1
if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() && !ipnet.IP.IsMulticast() && !ipnet.IP.IsLinkLocalUnicast() && !ipnet.IP.IsLinkLocalMulticast() && ipnet.IP.To4() != nil {
ip = ipnet.IP.String()
if len(ip) > 0 && check(ip, network) {
return ip
}
}
}
}
return ip
}
func IsPortInUse(host string, port int64) bool {
conn, err := net.DialTimeout("tcp", net.JoinHostPort(host, fmt.Sprintf("%d", port)), time.Second*1)
if err == nil {
conn.Close()
return true
}
return false
}