41 lines
783 B
Plaintext
41 lines
783 B
Plaintext
package netUtil
|
||
|
||
import (
|
||
"errors"
|
||
"net"
|
||
)
|
||
|
||
// 需要排除的IP: 169.254.xx.xx (未分配到IP的段)
|
||
func excludeIP(ip4 net.IP) bool {
|
||
return ip4[0] == 169 && ip4[1] == 254
|
||
}
|
||
|
||
// GetLocalIPs
|
||
//
|
||
// @Description: 获取本机局域网IP(排除环回地址)
|
||
// @return ips
|
||
// @return err
|
||
func GetLocalIPs() (ips []string, err error) {
|
||
var addrs []net.Addr
|
||
if addrs, err = net.InterfaceAddrs(); err != nil {
|
||
return
|
||
}
|
||
|
||
for _, addr := range addrs {
|
||
if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() /*&& ipnet.IP.IsPrivate()*/ {
|
||
if ip4 := ipnet.IP.To4(); ip4 != nil {
|
||
if !excludeIP(ip4) {
|
||
ips = append(ips, ipnet.IP.String())
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if len(ips) == 0 {
|
||
// 未获取到本机局域网IP
|
||
err = errors.New("not found")
|
||
}
|
||
|
||
return
|
||
}
|