-
Notifications
You must be signed in to change notification settings - Fork 657
/
Copy pathsetup.go
89 lines (76 loc) · 1.76 KB
/
setup.go
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package setup
import (
"fmt"
"net"
"os"
"github.com/fatih/color"
"github.com/yaoapp/yao/config"
)
// Endpoints get endpoints
func Endpoints(cfg config.Config) ([]Endpoint, error) {
networks, err := getNetworks()
if err != nil {
return nil, err
}
var endpoints []Endpoint
for _, network := range networks {
port := fmt.Sprintf(":%d", cfg.Port)
if port == ":80" {
port = ""
}
endpoint := Endpoint{
URL: fmt.Sprintf("http://%s%s", network.IPv4, port),
Interface: network.Interface,
}
endpoints = append(endpoints, endpoint)
}
return endpoints, nil
}
func printError(message string, args ...interface{}) {
fmt.Println(color.RedString(message, args...))
os.Exit(1)
}
func printInfo(message string, args ...interface{}) {
fmt.Println(color.GreenString(message, args...))
}
func getNetworks() ([]Network, error) {
interfaces, err := net.Interfaces()
if err != nil {
return nil, err
}
var networks []Network
for _, iface := range interfaces {
// 跳过 loopback 接口(如 lo0)
if iface.Flags&net.FlagUp == 0 || iface.Flags&net.FlagLoopback != 0 {
continue
}
// 获取每个接口的地址信息
addrs, err := iface.Addrs()
if err != nil {
return nil, err
}
// 过滤只获取 IPv4 地址
for _, addr := range addrs {
if ipnet, ok := addr.(*net.IPNet); ok && ipnet.IP.To4() != nil {
// 将网卡名称和 IPv4 地址存储到 Network 结构体中
network := Network{
IPv4: ipnet.IP.String(),
Interface: iface.Name,
}
// 添加到结果切片
networks = append(networks, network)
}
}
}
return networks, nil
}
// Network network
type Network struct {
IPv4 string
Interface string
}
// Endpoint endpoint
type Endpoint struct {
URL string
Interface string
}