package common
import (
+ "errors"
"log"
"net"
- "os"
)
//GetOutboundIP get ip of device itself
-//priority: 10.xxx.xxx.xx / 192.xxx.xxx.xxx / e.t.c.
+//Only return wifi ip
func GetOutboundIP() (addr string, err error) {
- addrs, err := net.InterfaceAddrs()
+ ifaces, err := net.Interfaces()
if err != nil {
return
}
- var addrElse string
- for _, a := range addrs {
- if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
- if ipnet.IP.To4() != nil {
- if ipnet.IP.String()[:2] == "10" {
- os.Stdout.WriteString(ipnet.IP.String() + "\n")
- addr = ipnet.IP.String()
- return
- }
- if ipnet.IP.String()[:3] == "192" {
- os.Stdout.WriteString(ipnet.IP.String() + "\n")
- addr = ipnet.IP.String()
- } else {
- if addrElse == "" || addr == "" {
- addrElse = ipnet.IP.String()
+ for _, iface := range ifaces {
+ if iface.Name[0:2] == "wl" {
+ addrs, _ := iface.Addrs()
+ for _, address := range addrs {
+ if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
+ if ipnet.IP.To4() != nil {
+ addr = ipnet.IP.String()
+ return
}
}
}
}
}
- if addr == "" {
- addr = addrElse
- }
- return
+ return "", errors.New("No interface named wl")
}
func CheckError(err error) bool {
var hostIPAddr []string
var netIface []net.Interface
- var v4 []net.IP
ifaces, err := net.Interfaces()
for _, iface := range ifaces {
if iface.Name[0:2] == "wl" {
for _, address := range addrs {
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
- v4 = append(v4, ipnet.IP)
hostIPAddr = append(hostIPAddr, ipnet.IP.String())
}
}