Selaa lähdekoodia

获取本机ip方法提交

wangkaiyue 3 vuotta sitten
vanhempi
commit
b08a158131
1 muutettua tiedostoa jossa 40 lisäystä ja 0 poistoa
  1. 40 0
      common/ip.go

+ 40 - 0
common/ip.go

@@ -0,0 +1,40 @@
+package netx
+
+import "net"
+
+// InternalIp returns an internal ip.
+func InternalIp() string {
+	infs, err := net.Interfaces()
+	if err != nil {
+		return ""
+	}
+
+	for _, inf := range infs {
+		if isEthDown(inf.Flags) || isLoopback(inf.Flags) {
+			continue
+		}
+
+		addrs, err := inf.Addrs()
+		if err != nil {
+			continue
+		}
+
+		for _, addr := range addrs {
+			if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
+				if ipnet.IP.To4() != nil {
+					return ipnet.IP.String()
+				}
+			}
+		}
+	}
+
+	return ""
+}
+
+func isEthDown(f net.Flags) bool {
+	return f&net.FlagUp != net.FlagUp
+}
+
+func isLoopback(f net.Flags) bool {
+	return f&net.FlagLoopback == net.FlagLoopback
+}