1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wycto-weigo

Клонировать/Скачать
functions.go 1.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
weiyi Отправлено 13.04.2022 16:06 150891d
package weigo
/*
函数都写在这儿
*/
import (
"errors"
"fmt"
"net"
"os"
)
/**
获取IP地址
*/
func GetIP() string {
ip, err := externalIP()
if err != nil {
return GetIP2()
fmt.Println(err)
}
return ip.String()
}
func GetIP2() string {
var ip = ""
address, err := net.InterfaceAddrs()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for _, address := range address {
// 检查ip地址判断是否回环地址
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
ip = ipnet.IP.String()
}
}
}
return ip
}
func externalIP() (net.IP, error) {
ifaces, err := net.Interfaces()
if err != nil {
return nil, err
}
for _, iface := range ifaces {
if iface.Flags&net.FlagUp == 0 {
continue // interface down
}
if iface.Flags&net.FlagLoopback != 0 {
continue // loopback interface
}
addrs, err := iface.Addrs()
if err != nil {
return nil, err
}
for _, addr := range addrs {
ip := getIpFromAddr(addr)
if ip == nil {
continue
}
return ip, nil
}
}
return nil, errors.New("connected to the network?")
}
func getIpFromAddr(addr net.Addr) net.IP {
var ip net.IP
switch v := addr.(type) {
case *net.IPNet:
ip = v.IP
case *net.IPAddr:
ip = v.IP
}
if ip == nil || ip.IsLoopback() {
return nil
}
ip = ip.To4()
if ip == nil {
return nil // not an ipv4 address
}
return ip
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wycto-weigo.git
git@api.gitlife.ru:oschina-mirror/wycto-weigo.git
oschina-mirror
wycto-weigo
wycto-weigo
main