liujiandao
2024-02-20 4860c7b312cdce2d948ee417b0bb1fed60fd9dc7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package util
 
import (
    "bytes"
    "errors"
    "net"
    "strconv"
)
 
// 获取本机网卡IP
func GetLocalIP(networkName string) (ipv4 string,mask string, err error) {
    interfaces, err := net.Interfaces()
    if err != nil {
        return "","", err
    }
 
    for _, i := range interfaces {
        byName, err := net.InterfaceByName(i.Name)
        if err != nil {
            return "","", err
        }
        addresses, err := byName.Addrs()
        for _, v := range addresses {
            if ipnet, ok:=v.(*net.IPNet);ok && !ipnet.IP.IsLoopback(){
                if ipnet.IP.To4() !=nil{
                    if byName.Name == networkName{
                        maskStr := ipnet.Mask.String()
                        mask64, _ := strconv.ParseUint(maskStr, 16, 32)
                        return ipnet.IP.String(),IpIntToString(int(mask64)),nil
                    }
                }
            }
        }
    }
    return "","", errors.New("ipv4 not found")
}
 
func IpIntToString(ipInt int) string{
    ipSegs := make([]string, 4)
    var len int = len(ipSegs)
    buffer := bytes.NewBufferString("")
    for i := 0; i < len; i++ {
        tempInt := ipInt & 0xFF
        ipSegs[len-i-1] = strconv.Itoa(tempInt)
 
        ipInt = ipInt >> 8
    }
    for i := 0; i < len; i++ {
        buffer.WriteString(ipSegs[i])
        if i < len-1 {
            buffer.WriteString(".")
        }
    }
    return buffer.String()
}