feat: 项目初始化
This commit is contained in:
8
internal/constants/constants.go
Normal file
8
internal/constants/constants.go
Normal file
@@ -0,0 +1,8 @@
|
||||
package constants
|
||||
|
||||
const (
|
||||
AppName = "netctl"
|
||||
DefaultConfig = "config.yaml"
|
||||
DefaultDHCPMsg = "请选择网卡以使用 DHCP"
|
||||
DefaultStaticMsg = "请选择网卡以设置静态 IP"
|
||||
)
|
||||
13
internal/model/classroom.go
Normal file
13
internal/model/classroom.go
Normal file
@@ -0,0 +1,13 @@
|
||||
package model
|
||||
|
||||
type ClassRoom struct {
|
||||
ID string
|
||||
Name string
|
||||
Addr string
|
||||
Mask string
|
||||
Gateway string
|
||||
}
|
||||
|
||||
func (c ClassRoom) GetName() string {
|
||||
return c.Name
|
||||
}
|
||||
5
internal/model/named.go
Normal file
5
internal/model/named.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package model
|
||||
|
||||
type Named interface {
|
||||
GetName() string
|
||||
}
|
||||
96
internal/net/nic.go
Normal file
96
internal/net/nic.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package net
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
||||
"github.com/AlecAivazis/survey/v2"
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
type NetIfWrap struct {
|
||||
net.Interface
|
||||
}
|
||||
|
||||
func (n NetIfWrap) GetName() string {
|
||||
return n.Interface.Name
|
||||
}
|
||||
|
||||
// 选择网卡
|
||||
func ChooseNic(nics []NetIfWrap, message string) (NetIfWrap, error) {
|
||||
var names []string
|
||||
for _, nic := range nics {
|
||||
names = append(names, nic.Name)
|
||||
}
|
||||
var choice string
|
||||
err := survey.AskOne(&survey.Select{
|
||||
Message: message,
|
||||
Options: names,
|
||||
}, &choice)
|
||||
if err != nil {
|
||||
return NetIfWrap{}, err
|
||||
}
|
||||
for _, nic := range nics {
|
||||
if nic.Name == choice {
|
||||
return nic, nil
|
||||
}
|
||||
}
|
||||
return NetIfWrap{}, fmt.Errorf("未找到网卡: %s", choice)
|
||||
}
|
||||
|
||||
// 设置静态IP
|
||||
func SetStaticIP(nic NetIfWrap, addr, mask, gateway string) error {
|
||||
cmd := exec.Command("netsh", "interface", "ip", "set", "address",
|
||||
fmt.Sprintf("name=%s", nic.Name),
|
||||
"static", addr, mask, gateway)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("netsh失败: %v, 输出: %s", err, string(out))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 设置 DHCP
|
||||
func SetDHCP(nic NetIfWrap) error {
|
||||
cmd := exec.Command("netsh", "interface", "ip", "set", "address",
|
||||
fmt.Sprintf("name=%s", nic.Name), "dhcp")
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("netsh失败: %v, 输出: %s", err, string(out))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Windows 管理员检查
|
||||
func IsAdmin() bool {
|
||||
sid, _ := windows.CreateWellKnownSid(windows.WinBuiltinAdministratorsSid)
|
||||
token := windows.Token(0)
|
||||
member, _ := token.IsMember(sid)
|
||||
return member
|
||||
}
|
||||
|
||||
// 提升管理员权限
|
||||
func RunAsAdmin() error {
|
||||
exe, _ := exec.LookPath(os.Args[0])
|
||||
args := os.Args[1:]
|
||||
cmd := exec.Command("powershell",
|
||||
"-Command",
|
||||
fmt.Sprintf(`Start-Process -FilePath "%s" -ArgumentList %s -Verb RunAs`, exe, joinArgsArray(args)),
|
||||
)
|
||||
cmd.Stdout = nil
|
||||
cmd.Stderr = nil
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func joinArgsArray(args []string) string {
|
||||
res := ""
|
||||
for i, a := range args {
|
||||
if i > 0 {
|
||||
res += ","
|
||||
}
|
||||
res += fmt.Sprintf("'%s'", a)
|
||||
}
|
||||
return res
|
||||
}
|
||||
Reference in New Issue
Block a user