Files
netcli/cmd/static.go
2025-12-03 23:29:51 +08:00

71 lines
1.5 KiB
Go

package cmd
import (
"fmt"
stdnet "net"
"netcli/config"
"netcli/internal/constants"
"netcli/internal/model"
netmod "netcli/internal/net"
"github.com/AlecAivazis/survey/v2"
"github.com/spf13/cobra"
)
var staticCmd = &cobra.Command{
Use: "static",
Short: "设置静态IP",
RunE: func(cmd *cobra.Command, args []string) error {
// 管理员权限检查
if !netmod.IsAdmin() {
fmt.Println("程序需要管理员权限,尝试提升...")
return netmod.RunAsAdmin()
}
// 获取本机网卡
ifaces, _ := stdnet.Interfaces()
var nics []netmod.NetIfWrap
for _, i := range ifaces {
nics = append(nics, netmod.NetIfWrap{i})
}
nic, _ := netmod.ChooseNic(nics, constants.DefaultStaticMsg)
// 加载配置文件
cfg, _ := config.LoadConfig(constants.DefaultConfig)
var rooms []model.ClassRoom
if cfg != nil && len(cfg.ClassRooms) > 0 {
rooms = cfg.ClassRooms
} else {
rooms = config.DefaultClassRooms()
}
// 用户选择教室
var roomNames []string
for _, r := range rooms {
roomNames = append(roomNames, r.Name)
}
var choice string
survey.AskOne(&survey.Select{Message: "请选择教室:", Options: roomNames}, &choice)
var room model.ClassRoom
for _, r := range rooms {
if r.Name == choice {
room = r
break
}
}
fmt.Printf("正在设置静态IP...\n网卡: %s\nIP: %s\nMask: %s\nGateway: %s\n",
nic.Name, room.Addr, room.Mask, room.Gateway)
return netmod.SetStaticIP(nic, room.Addr, room.Mask, room.Gateway)
},
}
func init() {
rootCmd.AddCommand(staticCmd)
}