Commit 12edcf66 by 浔阳陌客

2022/04/26

parent 1d4fcc1e
package main
import (
"os"
"path"
"strings"
)
func getAppFullName() string {
return os.Args[0]
}
func getAppName() string {
return path.Base(os.Args[0])
}
func getAppNameNewVersion() string {
app := getAppName()
switch OS_Type {
case OS_Type_Windows:
return strings.TrimSuffix(app, path.Ext(app))
default:
return app + "_new"
}
}
#!/bin/bash
mkdir release >/dev/null 2>&1
way=$1
case "$way" in
win)
CGO_ENABLED=0 GOOS=windows go build -o caut_windows.exe *.go
CGO_ENABLED=0 GOOS=windows go build -o ci_windows.exe *.go
;;
*)
os=(windows darwin linux)
......@@ -11,8 +11,8 @@ win)
test "$i" == "windows" && ext="${i}.exe"
test "$i" == "darwin" && ext="macos"
test "$i" == "linux" && ext=$i
CGO_ENABLED=0 GOOS="$i" GOARCH=amd64 go build -o release/caut_"$ext" -a *.go
openssl sha256 release/caut_"$ext" >release/caut_"$ext"_sha256.txt
CGO_ENABLED=0 GOOS="$i" GOARCH=amd64 go build -o release/ci_"$ext" -a *.go
openssl sha256 release/ci_"$ext" >release/ci_"$ext"_sha256.txt
done
;;
esac
......
......@@ -8,11 +8,3 @@ func dInit() {
fmt.Println("程序开源,项目地址: http://git.zhiweidata.top/taotengfei/caut")
fmt.Println("----------------------------------------------------------")
}
type inputBasic struct {
Region string `json:"region"`
Dept string `json:"dept"`
Name string `json:"name"`
}
// func (ib * inputBasic)
......@@ -6,23 +6,43 @@ import (
pub "git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
)
func envCheck(ip string) {
if pub.User_computername == "" {
pub.User_computername = ip
var OS_Type int
const OS_Type_Windows = pub.OS_Type_Windows
const OS_Type_Linux = pub.OS_Type_Linux
const OS_Type_MacOS = pub.OS_Type_MacOS
const INFO = pub.INFO
const ERROR = pub.ERROR
var deptstring string
var regionstring string
var ciName_self string
var ciName_new string
func envModify(target *string, s string) {
if *target == "" {
*target = s
}
}
func parseFlag() (information, bool) {
var info information
func parseFlag() bool {
var mode bool
flag.StringVar(&info.Region, "region", "", "地区信息,有效值:宁波、郑州")
flag.StringVar(&info.Dept, "dept", "", "部门信息,有效值:人事部、培训部、产品部、技术部")
flag.StringVar(&info.Name, "name", "", "姓名")
flag.BoolVar(&mode, "server", false, "程序运行换几个")
regionstring = pub.JoinPlus(pub.Dept_zw_region_array, "", "、")
deptstring = pub.JoinPlus(pub.Dept_zw_noqbmm_array, "", "、")
flag.StringVar(&iwu.Region, "region", "", "地区信息,有效值:"+regionstring)
flag.StringVar(&iwu.Dept, "dept", "", "部门信息,有效值:"+deptstring)
flag.StringVar(&iwu.Name, "name", "", "姓名")
flag.BoolVar(&mode, "server", false, "运行环境")
flag.Parse()
// if !info.Check() {
// os.Exit(-1)
return mode
}
func envCheckVersion() {
pub.SendADMsg(pub.Msg_CmdbInfo, pub.GJCmdbInfo(pub.Msg_CmdbInfo_update, pub.Version))
// if !pub.CI_Update {
// return
// }
download()
return info, mode
}
......@@ -4,6 +4,8 @@ import (
"golang.org/x/text/encoding/simplifiedchinese"
)
const platform string = "platform.ps1"
func getWinPlatform() []byte {
psfile := []byte(`
Add-Type -AssemblyName System.Windows.Forms
......
......@@ -4,7 +4,7 @@ go 1.18
require (
git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0
github.com/ying32/govcl v2.2.0+incompatible
golang.org/x/text v0.3.7
)
require (
......@@ -14,11 +14,8 @@ require (
github.com/gookit/color v1.5.0 // indirect
github.com/mozillazg/go-pinyin v0.19.0 // indirect
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
github.com/ying32/dylib v0.0.0-20220227124818-fdf9ea9fbc96 // indirect
github.com/ying32/liblclbinres v0.0.0-20220111074620-df670ba4baf4 // indirect
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect
golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0 // indirect
golang.org/x/text v0.3.7 // indirect
)
replace git.zhiweidata.top/taotengfei/AD-Control-Golang/public v0.0.0 => ../AD-Control-Golang/public
......@@ -19,12 +19,6 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8=
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
github.com/ying32/dylib v0.0.0-20220227124818-fdf9ea9fbc96 h1:+kU/yXSAQPL4G7OQOxz/j62GdM+G5yd5J1/NNm7u3QI=
github.com/ying32/dylib v0.0.0-20220227124818-fdf9ea9fbc96/go.mod h1:WPBTfbqg/aA1xqHFPB4fgBHETq/G/75yErbnexmaEOo=
github.com/ying32/govcl v2.2.0+incompatible h1:TZFn0SUuZaufZ+U7Urs9o1ZmbflsCPQcswz1bo22w9s=
github.com/ying32/govcl v2.2.0+incompatible/go.mod h1:yZVtbJ9Md1nAVxtHKIriKZn4K6TQYqI1en3sN/m9FJ8=
github.com/ying32/liblclbinres v0.0.0-20220111074620-df670ba4baf4 h1:g6QaezInPib6PtPzh4w1qEzQPD4bT3zbX8dfBCSFqYM=
github.com/ying32/liblclbinres v0.0.0-20220111074620-df670ba4baf4/go.mod h1:oEmgAOPt+dALMzap3HgEQnaN+iCLE7m3C867jERInaI=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
......
package main
import (
"fmt"
"sync"
pub "git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
)
var wg sync.WaitGroup
type infoHardware struct {
CPU string `json:"cpu"`
Memory string `json:"memory"`
Disk string `json:"disk"`
}
func (ih *infoHardware) GetWinCPU() {
cpuCount, cpuName, cpuCores, cpuLogicalProcessors := pub.GetHardwareCPUForPS()
ih.CPU = fmt.Sprintf("%s * %s %s核 %s线程", cpuCount, cpuName, cpuCores, cpuLogicalProcessors)
wg.Done()
}
func (ih *infoHardware) GetWinMemory() {
var Memory string
Capacity, Speed, MemoryType, mCount := pub.GetHardwareMemoryForPS()
for i := 0; i <= mCount; i++ {
Memory += fmt.Sprintf("%dGB %sMhz %s,", Capacity[i], Speed[i], MemoryType[i])
}
ih.Memory = Memory[0 : len(Memory)-1]
wg.Done()
}
func (ih *infoHardware) GetWinDisk() {
var Disk string
_, Sizen, MediaType, hCount := pub.GetHardwareHardDiskForPS(false)
for i := 0; i <= hCount; i++ {
Disk += fmt.Sprintf("%dGB %s,", Sizen[i], MediaType[i])
}
ih.Disk = Disk[0 : len(Disk)-1]
wg.Done()
}
func getWinHardware() infoHardware {
var ih infoHardware
wg.Add(3)
go ih.GetWinCPU()
go ih.GetWinMemory()
go ih.GetWinDisk()
wg.Wait()
return ih
}
......@@ -8,45 +8,42 @@ import (
"strings"
)
type information struct {
type infoSystem struct {
ips []string
IP string `json:"ip"`
macaddresses []string
Macaddress string `json:"macaddress"`
Hostname string `json:"hostname"`
Dept string `json:"dept"`
Name string `json:"name"`
Region string `json:"region"`
MachineID string `json:"MachineID"`
}
func (info *information) Check() bool {
if info.Region == "" {
LOG(ERROR, "FLAG", fmt.Sprint("地区信息未输入,参考命令 --regsion=宁波,有效值:宁波、郑州"))
return false
}
if info.Region == "" {
LOG(ERROR, "FLAG", fmt.Sprint("部门信息未输入,参考命令 --dept=技术部门,有效值:人事部门、培训部门、产品部门、技术部门"))
return false
}
if info.Name == "" {
LOG(ERROR, "FLAG", fmt.Sprint("姓名未输入,参考命令 --name=xxx"))
return false
}
return true
func getWinSystem() infoSystem {
var is infoSystem
is.GetIP()
is.GetMACAddress()
is.MachineID = getWinMachineID()
is.Hostname = pub.User_computername
return is
}
func (info *information) GetIP() {
func getMacOSSystem() infoSystem {
var is infoSystem
is.GetIP()
is.GetMACAddress()
is.MachineID = getWinMachineID()
is.Hostname = pub.User_computername
return is
}
func (is *infoSystem) GetIP() {
switch pub.OS_Type {
case pub.OS_Type_Windows:
info.ips = pub.GetMultiIPFromNslookup()
is.ips = pub.GetMultiIPFromNslookup()
default:
info.ips = info.getIPFromInterface()
is.ips = is.getIPFromInterface()
}
info.ipDelete()
info.ipString()
is.ipDelete()
is.ipString()
}
func (info *information) getIPFromInterface() []string {
func (is *infoSystem) getIPFromInterface() []string {
addrs, err := net.InterfaceAddrs()
if err != nil {
LOG(ERROR, "IP", err)
......@@ -57,12 +54,14 @@ func (info *information) getIPFromInterface() []string {
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
ip_string := ipnet.IP.String()
switch info.Region {
case pub.Region_nb:
if strings.Index(ip_string, "192.168.0.") != -1 {
ips = append(ips, ip_string)
}
}
// switch is.Region {
// case pub.Region_nb:
// if strings.Index(ip_string, "192.168.0.") != -1 {
// ips = append(ips, ip_string)
// }
// }
ips = append(ips, ip_string)
envModify(&pub.User_computername, ip_string)
}
}
}
......@@ -71,17 +70,17 @@ func (info *information) getIPFromInterface() []string {
}
// 排除特殊提示
func (info *information) ipDelete() {
for i, j := range info.ips {
func (is *infoSystem) ipDelete() {
for i, j := range is.ips {
if strings.HasPrefix("127", j) || strings.HasPrefix("169", j) {
info.ips[i] = ""
is.ips[i] = ""
}
}
}
func (info *information) ipString() string {
func (is *infoSystem) ipString() string {
var r string
for _, ip := range info.ips {
for _, ip := range is.ips {
if ip == "" {
continue
}
......@@ -90,26 +89,26 @@ func (info *information) ipString() string {
if len(r) != 0 {
r = r[0 : len(r)-1]
}
info.IP = r
is.IP = r
return r
}
func (info *information) GetMACAddress() {
for _, ip := range info.ips {
func (is *infoSystem) GetMACAddress() {
for _, ip := range is.ips {
if ip == "" {
continue
}
switch pub.OS_Type {
case pub.OS_Type_Windows:
info.macaddresses = append(info.macaddresses, pub.GetMacaddressFromIP(ip))
is.macaddresses = append(is.macaddresses, pub.GetMacaddressFromIP(ip))
default:
info.macaddresses = append(info.macaddresses, string(pub.Execcmd_output(fmt.Sprintf(`arp %s | awk '{print $4}'`, ip))))
is.macaddresses = append(is.macaddresses, string(pub.Execcmd_output(fmt.Sprintf(`arp %s | awk '{print $4}'`, ip))))
}
}
info.macString()
is.macString()
}
func (info *information) macString() {
func (is *infoSystem) macString() {
var r string
for _, macaddress := range info.macaddresses {
for _, macaddress := range is.macaddresses {
if macaddress == "" {
continue
}
......@@ -118,5 +117,12 @@ func (info *information) macString() {
if len(r) != 0 {
r = r[0 : len(r)-1]
}
info.Macaddress = r
is.Macaddress = r
}
func getWinMachineID() string {
r, err := pub.PSCommandOutputNoSplit(`(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ProductID).ProductId`)
if err != nil {
winErrorExit(err)
}
return strings.TrimSpace(string(r))
}
package main
import (
"encoding/json"
"fmt"
"os"
pub "git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
)
type infoWorker struct {
Dept string `json:"dept"`
Name string `json:"name"`
Region string `json:"region"`
}
func (iw *infoWorker) Check() bool {
if iw.Region == "" {
LOG(ERROR, "FLAG", fmt.Sprint("地区信息未输入,参考命令 --regsion=宁波,有效值:"+regionstring))
return false
} else if !pub.ArrayContains(pub.Dept_zw_region_array, iw.Region) {
LOG(ERROR, "FLAG", fmt.Sprint("地区信息错误,参考命令 --regsion=宁波,有效值:"+regionstring))
return false
}
if iw.Dept == "" {
LOG(ERROR, "FLAG", fmt.Sprint("部门信息未输入,参考命令 --dept=技术,有效值:"+deptstring))
return false
} else if !pub.ArrayContains(pub.Dept_zw_noqbmm_array, iw.Dept) {
LOG(ERROR, "FLAG", fmt.Sprint("地区信息错误,参考命令 --regsion=宁波,有效值:"+deptstring))
return false
}
if iw.Name == "" {
LOG(ERROR, "FLAG", fmt.Sprint("姓名未输入,参考命令 --name=陶腾飞"))
return false
}
return true
}
func getWinWorker() infoWorker {
var iw infoWorker
psfile := fmt.Sprintf(`%s\%s`, pub.User_tmp, platform)
l, err := os.OpenFile(psfile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0766)
if err != nil {
winErrorExit(err)
}
l.Write(getWinPlatform())
if err := l.Close(); err != nil {
winErrorExit(err)
}
out_byte, err := pub.PSFileOutputNoSplitRemoteSigend(psfile)
if err != nil {
winErrorExit(err)
}
out := pub.ToChineseChar(out_byte)
var iw_window infoWorker
if err := json.Unmarshal(out, &iw_window); err != nil {
winErrorExit(err)
}
iw.Dept = iw_window.Dept
iw.Name = iw_window.Name
iw.Region = iw_window.Region
return iw
}
package main
import "fmt"
func macOS() {
fmt.Println("hello world")
getMacOSParameter()
}
func getMacOSParameter() {
getUnixWorker()
}
......@@ -9,38 +9,46 @@ import (
pub "git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
)
const INFO = pub.INFO
const ERROR = pub.ERROR
func initialize() {
if !pub.Zhiweireach() {
pub.ADServerDaemon = pub.Host_adserver_ip + pub.DaemonLogListen
pub.ADServerLogDaemon = pub.Host_adserver_ip + pub.DaemonLogListen
if !telnet(pub.Host_adserver_lan, pub.DaemonListen) {
pub.ADServerDaemon = pub.Host_adserver_wan + pub.DaemonListen
pub.ADServerLogDaemon = pub.Host_adserver_wan + pub.DaemonLogListen
} else {
pub.ADServerDaemon = pub.Host_adserver_lan + pub.DaemonListen
pub.ADServerLogDaemon = pub.Host_adserver_lan + pub.DaemonLogListen
}
}
OS_Type = pub.OS_Type
ciName_self = getAppName()
ciName_new = getAppNameNewVersion()
envCheckVersion()
}
func main() {
initialize()
_, server := parseFlag()
server := parseFlag()
if server {
switch pub.OS_Type {
case pub.OS_Type_Windows:
switch OS_Type {
case OS_Type_Windows:
windowsServer()
case pub.OS_Type_Linux:
case OS_Type_Linux:
linuxServer()
case pub.OS_Type_MacOS:
case OS_Type_MacOS:
macOS()
}
} else {
switch pub.OS_Type {
case pub.OS_Type_Windows:
switch OS_Type {
case OS_Type_Windows:
windowsDesktop()
case pub.OS_Type_Linux:
case OS_Type_Linux:
linuxDesktop()
case pub.OS_Type_MacOS:
case OS_Type_MacOS:
macOS()
}
}
......
package main
import (
"fmt"
"io"
"net"
"net/http"
"os"
"time"
pub "git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
)
func telnet(ip, port string) bool {
// 3 秒超时
conn, err := net.DialTimeout("tcp", ip+port, 3*time.Second)
if err != nil {
return false
// todo log handler
} else {
if conn != nil {
_ = conn.Close()
return true
} else {
return false
}
}
}
func download() {
url := fmt.Sprintf("http://%s/file/%s", pub.ADServerDaemon, ciName_self)
res, err := http.Get(url)
if err != nil {
panic(err)
}
f, err := os.OpenFile(ciName_new, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0766)
if err != nil {
panic(err)
}
_, err2 := io.Copy(f, res.Body)
if !(err2 == nil && err2 != io.EOF) {
os.Exit(1)
}
}
SHA256(release/ci_linux)= a9442f4b8db919db149c8e77762b04f9e340e0621353d3fb9bddc9631efffbb2
SHA256(release/ci_macos)= 60d9ee014b773b36e1b015a5bc9035f7e326784017da014a05def1b572283e38
SHA256(release/ci_windows.exe)= de5825804e89922aa686ce470406b447f275b3da3bc24d8b874cf892b5189314
package main
import "os"
var iwu infoWorker
func getUnixWorker() {
if !iwu.Check() {
os.Exit(-1)
}
}
package main
import (
"encoding/json"
"fmt"
"os"
pub "git.zhiweidata.top/taotengfei/AD-Control-Golang/public"
"golang.org/x/text/encoding/simplifiedchinese"
)
const platform string = "platform.ps1"
func windowsDesktop() {
psfile := fmt.Sprintf(`%s\%s`, pub.User_tmp, platform)
l, err := os.OpenFile(psfile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0766)
if err != nil {
winErrorExit(err)
}
l.Write(getWinPlatform())
if err := l.Close(); err != nil {
winErrorExit(err)
}
out_byte, err := pub.PSFileOutputNoSplitRemoteSigend(psfile)
if err != nil {
winErrorExit(err)
}
out := parseChinese(out_byte)
var ib inputBasic
if err := json.Unmarshal(out, &ib); err != nil {
winErrorExit(err)
}
var info information
info.GetIP()
info.GetMACAddress()
info.Hostname = pub.User_computername
info.Dept = ib.Dept
info.Name = ib.Name
info.Region = ib.Region
fmt.Println(info.IP, info.Macaddress)
fmt.Println(info.Dept, info.Name, info.Region)
getWinParameter()
}
func windowsServer() {
fmt.Println("hello world")
}
func getWinParameter() {
// ih := getWinHardware()
// is := getWinSystem()
// iw := getWinWorker()
}
func winMsg(s string) {
pub.Execcmd_nowait(fmt.Sprintf(`msg %s "%s"`, pub.User_name, s))
pub.Execcmd_nowait(fmt.Sprintf(`msg %s %s`, pub.User_name, s))
}
func winErrorExit(err error) {
winMsg(err.Error())
os.Exit(1)
}
func parseChinese(b []byte) []byte {
r, _ := simplifiedchinese.GBK.NewDecoder().Bytes(b)
return r
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment