From b50ab8c04f6ae6097701a2a2b0f3cd9226ad77e3 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期三, 30 十月 2019 15:19:23 +0800 Subject: [PATCH] fix: change network settings --- extend/sys/system.go | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 116 insertions(+), 0 deletions(-) diff --git a/extend/sys/system.go b/extend/sys/system.go index 563d85b..526093e 100644 --- a/extend/sys/system.go +++ b/extend/sys/system.go @@ -1,14 +1,58 @@ package sys import ( + "encoding/json" "errors" + "io/ioutil" + "net/http" + "net/url" + "os" "os/exec" + "strconv" + "webserver/extend/config" + "webserver/extend/util" "fmt" "net" "strings" "time" ) + +func execRootCommand(cmd string) (bool, string) { + serverPort := config.Server.SysServerPort + if serverPort == "" { + serverPort = "18081" + } + sysConfigServer := fmt.Sprintf("http://127.0.0.1:%s/api/v1/command/exec", serverPort) + resp, err := http.PostForm(sysConfigServer, url.Values{"command": {cmd}}) + + if err != nil { + return false, err.Error() + } + + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return false, err.Error() + } + + type response struct { + Code int `json:"code"` + Success bool `json:"success"` + Msg string `json:"msg"` + CMD string `json:"cmd"` + Data string `json:"data"` + } + + var rsp response + if err := json.Unmarshal(body, &rsp); err != nil { + return false, err.Error() + } + + fmt.Println(body) + fmt.Println(rsp) + return rsp.Success, rsp.Data +} // 妫�鏌� root鏉冮檺 func CheckRootPermissions() bool { @@ -20,6 +64,78 @@ return true } +// 鑾峰彇鏈満缃戝崱IP +func GetLocalIP(networkName string) (ipv4 string, mask string, err error) { + interfaces, err := net.Interfaces() + if err != nil { + return "", "", err + } + + for _, i := range interfaces { + byName, err := net.InterfaceByName(i.Name) + if err != nil { + return "", "", err + } + addresses, err := byName.Addrs() + for _, v := range addresses { + if ipnet, ok := v.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { + if ipnet.IP.To4() != nil { + if byName.Name == networkName { + maskStr := ipnet.Mask.String() + mask64, _ := strconv.ParseUint(maskStr, 16, 32) + return ipnet.IP.String(), util.IpIntToString(int(mask64)), nil + } + } + } + } + } + return "", "", errors.New("ipv4 not found") +} + +// 鑾峰彇鏈満缃戝叧ip +func GetDefaultRoute(networkName string) (route string, err error) { + cmdStr := fmt.Sprintf("ip route show | grep -P \"^default.*%s\" | awk '{printf $3}'", networkName) + cmd := exec.Command("/bin/sh", "-c", cmdStr) + b, err := cmd.Output() + if err != nil { + return "", err + } + + return string(b), nil +} + +func GetDnsServer() (dns string, err error) { + cmd := exec.Command("/bin/sh", "-c", "cat /etc/resolv.conf | grep nameserver | head -1 |awk '{printf $2}'") + b, err := cmd.Output() + if err != nil { + return "", err + } + + return string(b), nil +} + +// 閰嶇疆鏈嶅姟鍣ㄧ綉缁� +func SetNetworkConfig(ipv4, netmask, gateway, dns string) (bool, string) { + networkConfigScript := "/opt/vasystem/bin/netconfig" + ifname := config.Server.NetworkAdapter + localIPv4, localNetMask, _ := GetLocalIP(ifname) + localGW, _ := GetDefaultRoute(ifname) + localDNS, _ := GetDnsServer() + + if localIPv4 == ipv4 && localNetMask == netmask && localGW == gateway && localDNS == dns { + return true, "" + } + + // 妫�鏌ユ枃浠舵槸鍚﹀瓨鍦� + if _, err := os.Stat(networkConfigScript); err != nil { + return false, "network Config Script not exist" + } + // # netconfig enp59s0f0 192.168.1.2 255.255.255.0 192.168.1.1 192.168.100.1 + cmdStr := fmt.Sprintf("%s %s %s %s %s %s", networkConfigScript, ifname, ipv4, netmask, gateway, dns) + // return exec.Command("/bin/sh", "-c", cmdStr).Run() == nil + return execRootCommand(cmdStr) +} + // 閰嶇疆鏃跺尯 func TimeZone() (string, int64) { cmd := exec.Command("/bin/sh", "-c", "echo -n $TZ") -- Gitblit v1.8.0