Commit c7dcb54f by 陶腾飞

update

parent 82a20f47
No preview for this file type
...@@ -12,10 +12,18 @@ func main(){ ...@@ -12,10 +12,18 @@ func main(){
var backupText = flag.String(public.Msg_Backup,"","backup status to AD") var backupText = flag.String(public.Msg_Backup,"","backup status to AD")
var execText = flag.String(public.Msg_Exec,"","exec to LocalDaemon") var execText = flag.String(public.Msg_Exec,"","exec to LocalDaemon")
var userText = flag.String(public.Msg_User,"","who is running me") var userText = flag.String(public.Msg_User,"","who is running me")
var wolmacText = flag.String("wolmac","","input mac address for wake pc")
var woluserText = flag.String("woluser","","input name for walk pc")
var runningText = flag.Bool("running",false,"runing daemon.exe & users.exe")
flag.Parse() flag.Parse()
if *reportText != "" {flag_report(reportText,userText)} if *runningText {flag_running();return}
if *backupText != "" {flag_bakcup(backupText)}
if *execText != "" {flag_exec(execText)} if *reportText != "" { flag_report(reportText,userText)}
if *backupText != "" { flag_bakcup(backupText)}
if *execText != "" { flag_exec(execText)}
if *wolmacText != "" { flag_wolmac(wolmacText)}
if *woluserText != "" { flag_woluser(woluserText)}
return return
} }
...@@ -27,4 +35,17 @@ func flag_bakcup(s *string){ ...@@ -27,4 +35,17 @@ func flag_bakcup(s *string){
} }
func flag_exec(s * string){ func flag_exec(s * string){
; ;
}
func flag_wolmac(mac * string){
if err := public.Wol(*mac); err != nil{
public.PrintLog(err)
} else {
public.PrintLog(*mac)
}
}
func flag_woluser(user * string){
public.PrintLog("暂未开发")
}
func flag_running(){
} }
\ No newline at end of file
No preview for this file type
package main package main
import ( import (
//"github.com/lxn/walk"
"AD-Control/public" "AD-Control/public"
"net" "net"
"io" "io"
"bufio" "bufio"
//"os/exec"
) )
//--------------------- //---------------------
// //
...@@ -21,16 +19,14 @@ func daemonInit(){ ...@@ -21,16 +19,14 @@ func daemonInit(){
public.PrintLog(public.Msg_Report_DaemonStart) public.PrintLog(public.Msg_Report_DaemonStart)
if notadserver() { if notadserver() {
// 发送 Daemon Start
// 检查版本 // 同时 检查 版本
public.SendServerReport(public.Msg_UpdateVersion)
// 发送Daemon Start
public.SendServerReport(public.Msg_Report_DaemonStart) public.SendServerReport(public.Msg_Report_DaemonStart)
} }
} }
func deamonRun(){ func deamonRun(){
daemonHost := public.Env_computername daemonHost := public.User_computername
listener, err := net.Listen("tcp", public.DaemonListen) listener, err := net.Listen("tcp", public.DaemonListen)
if err != nil { if err != nil {
public.PrintLog("Listen Error ", err) public.PrintLog("Listen Error ", err)
...@@ -63,10 +59,8 @@ func deamonRun(){ ...@@ -63,10 +59,8 @@ func deamonRun(){
// 关闭连接 // 关闭连接
if err := conn.Close() ; err!= nil{ if err := conn.Close() ; err!= nil{
public.PrintLog(err) public.PrintLog(err)
} }
continue continue
}else{ }else{
public.PrintLog(daemonHost," Listen Error ", err) public.PrintLog(daemonHost," Listen Error ", err)
} }
...@@ -76,16 +70,14 @@ func deamonRun(){ ...@@ -76,16 +70,14 @@ func deamonRun(){
func main() { func main() {
//if public.Daemon {return}
daemonInit() daemonInit()
deamonRun() deamonRun()
} }
func adserver() bool{ func adserver() bool{
if public.Env_MainADHostname == public.Env_computername {return true} if public.Env_MainADHostname == public.User_computername {return true}
return false return false
} }
func notadserver() bool{ func notadserver() bool{
if public.Env_MainADHostname != public.Env_computername {return true} if public.Env_MainADHostname != public.User_computername {return true}
return false return false
} }
package main
import (
"fyne.io/fyne/widget"
"fyne.io/fyne/app"
)
func main() {
app := app.New()
w := app.NewWindow("Hello")
w.SetContent(widget.NewVBox(
widget.NewLabel("Hello Fyne!"),
widget.NewButton("Quit", func() {
app.Quit()
}),
))
w.ShowAndRun()
}
\ No newline at end of file
...@@ -6,7 +6,7 @@ const Debug bool = true ...@@ -6,7 +6,7 @@ const Debug bool = true
const DaemonPort string = "16823" const DaemonPort string = "16823"
const DaemonListen string = ":" + DaemonPort const DaemonListen string = ":" + DaemonPort
const ADServerDaemon string = Env_MainADHostname + DaemonListen const ADServerDaemon string = Env_MainADHostname + DaemonListen
var LocalDaemon string = Env_computername + DaemonListen var LocalDaemon string = User_computername + DaemonListen
const DocuBase string = `C:\Users\Public\Documents\AD-Control\` const DocuBase string = `C:\Users\Public\Documents\AD-Control\`
const RandMax int = 60 const RandMax int = 60
const Version string = "0.5.1" const Version string = "0.5.1"
...@@ -15,20 +15,22 @@ const Application string = "AD-Control-Log" ...@@ -15,20 +15,22 @@ const Application string = "AD-Control-Log"
// user env /////////////////////////////////////////////////////////////// // user env ///////////////////////////////////////////////////////////////
var Env_userprofile string = GetEnv("USERPROFILE") var User_profile string = GetEnv("USERPROFILE")
var Env_username string = GetEnv("USERNAME") var User_name string = GetEnv("USERNAME")
var Env_computername string = GetEnv("COMPUTERNAME") var User_computername string = GetEnv("COMPUTERNAME")
var Env_homeshare string = GetEnv("HOMESHARE") var User_homeshare string = GetEnv("HOMESHARE")
var Env_userdomain string = GetEnv("USERDOMAIN") var User_userdomain string = GetEnv("USERDOMAIN")
var Env_fqdn_cn string = GetEnvFqdn("CN") var User_fqdn_cn string = GetEnvFqdn("CN")
var Env_dept string = GetEnvFqdn("OU") var User_dept string = GetEnvFqdn("OU")
var User_sid string = Reg_query_key_one(HKCU,`Software\Microsoft\Windows\CurrentVersion\FileAssociations`,"UserSid")
var User_sessionID string = Reg_query_item_one(HKU,User_sid+`\Volatile Environment`)
// win-computer env /////////////////////////////////////////////////////
// computer env /////////////////////////////////////////////////////
const Env_FreeFileSyncExe string = `C:\Progra~2\zhiwei\FreeFileSync_10.22\FreeFileSync.exe` const Env_FreeFileSyncExe string = `C:\Progra~2\zhiwei\FreeFileSync_10.22\FreeFileSync.exe`
const HKCU string = "HKCU"
const HKLM string = "HKLM"
const HKU string = "HKU"
// AD env /////////////////////////////////////////////////////////// // AD env ///////////////////////////////////////////////////////////
...@@ -37,13 +39,13 @@ const Env_MainADHostname string = "ADSERVER" ...@@ -37,13 +39,13 @@ const Env_MainADHostname string = "ADSERVER"
const Env_SMBAdserver string = `\\` + Env_MainADHostname + `\` const Env_SMBAdserver string = `\\` + Env_MainADHostname + `\`
const Env_ADSoft string = Env_SMBAdserver + "software" const Env_ADSoft string = Env_SMBAdserver + "software"
const Env_ADMain string = Env_SMBAdserver + "ADMAIN" const Env_ADMain string = Env_SMBAdserver + "ADMAIN"
var Env_ADMainDeptShare string = Env_ADMain + `\` + Env_dept + `\` + "部门共享" var Env_ADMainDeptShare string = Env_ADMain + `\` + User_dept + `\` + "部门共享"
const Env_ADSoftlike string = Env_ADSoft + `\` + "softlike" const Env_ADSoftlike string = Env_ADSoft + `\` + "softlike"
const Env_ADApplication string = Env_ADSoft + `\` + "application" + `\` const Env_ADApplication string = Env_ADSoft + `\` + "application" + `\`
const Env_ADSoftTool string = Env_ADSoft + `\` + "tools" + `\` const Env_ADSoftTool string = Env_ADSoft + `\` + "tools" + `\`
const Env_ADSoftTool_RebootUser string = Env_ADApplication + "reboot.bat" const Env_ADSoftTool_RebootUser string = Env_ADApplication + "reboot.bat"
const Env_ADSoftTool_Update string = Env_ADApplication + "update.bat" const Env_ADSoftTool_Update string = Env_ADApplication + "update.bat"
const Env_ADsoftware_local string = `F:\software\softlike\`
// backup env ////////////////////////////////////////////////////////////// // backup env //////////////////////////////////////////////////////////////
...@@ -59,7 +61,8 @@ var BackupReplaceKey =[]byte("-tengfei-") ...@@ -59,7 +61,8 @@ var BackupReplaceKey =[]byte("-tengfei-")
const Link_WxworkBot string = `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=59107f72-5b72-4a20-a33c-fdb1cd46f2c6` const Link_WxworkBot string = `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=59107f72-5b72-4a20-a33c-fdb1cd46f2c6`
const Link_MultiSplit string = Env_ADApplication + "win_MultiSplit.exe" const Link_MultiSplit string = Env_ADApplication + "win_MultiSplit.exe"
const Cmdk string = "cmd /k " const Cmdk string = "cmd /k "
const Startk string = "cmd /k start " const Startk string = "cmd /k start "
var Dir_Windows string = GetEnv("windir") + `\`
// //
// //
// //
...@@ -89,20 +92,21 @@ const Msg_Report_UserStart string = "User Start" ...@@ -89,20 +92,21 @@ const Msg_Report_UserStart string = "User Start"
const Msg_Report_Offwork string = "offwork" const Msg_Report_Offwork string = "offwork"
const Msg_Report_OverBak string = "overbak" const Msg_Report_OverBak string = "overbak"
// msg backup status ////////////////////////////////////////////////////////////// // msg backup status //////////////////////////////////////////////////////////////
const Msg_Backup_Status_Start string = "start" const Msg_Backup_Status_Start string = "start"
const Msg_Backup_Status_If string = "if" const Msg_Backup_Status_If string = "if"
const Msg_Backup_Status_Continue string = "Continue" const Msg_Backup_Status_Continue string = "Continue"
const Msg_Backup_Status_Run string = "run" const Msg_Backup_Status_Run string = "run"
//const Msg_Backup_Status_Over string = "over"
const Msg_Backup_Status_Error string = msgerror const Msg_Backup_Status_Error string = msgerror
// msg exec status //////////////////////////////////////////////////////////////// // msg exec status ////////////////////////////////////////////////////////////////
const Msg_Exec_Cmder_ADServer int = 0
const Msg_Exec_Cmder_LocalDaemon int = 1
const Msg_Exec_Cmder_LocalUser int = 2
const Msg_Exec_State_Request string = "request" const Msg_Exec_State_Request string = "request"
const Msg_Exec_State_Ack string = "ack" const Msg_Exec_State_Ack string = "ack"
const Msg_Exec_CloseWindows string = "closewindow" const Msg_Exec_CloseWindows string = "closewindow"
...@@ -114,12 +118,12 @@ const Msg_Exec_LogOffUser_cmd string = "shutdown -l" ...@@ -114,12 +118,12 @@ const Msg_Exec_LogOffUser_cmd string = "shutdown -l"
const Msg_Exec_UserExec string = "userexec" const Msg_Exec_UserExec string = "userexec"
const Msg_Exec_RebootWindows string = "rebootWindows" const Msg_Exec_RebootWindows string = "rebootWindows"
const Msg_Exec_RebootWindows_cmd string = "shutdown -r -t 15" const Msg_Exec_RebootWindows_cmd string = "shutdown -r -t 15"
const Msg_Exec_UpdateVersion string = "updateverion"
const Msg_Exec_UpdateVersion_cmd string = Env_ADSoftTool_Update
const Msg_Exec_InstallSoftware string = "installsoftware"
// group msg //// // group msg ////
const Msg_UpdateVersion string = "updateverion"
const Msg_UpdateVersion_cmd string = Env_ADSoftTool_Update
// Basic Json Fromat /////////////////////////////////////////////////////// // Basic Json Fromat ///////////////////////////////////////////////////////
type MJbase struct{ type MJbase struct{
...@@ -143,7 +147,9 @@ type MJexec struct { ...@@ -143,7 +147,9 @@ type MJexec struct {
MJbase MJbase
Instruction string `json:"instruction"` Instruction string `json:"instruction"`
Command string `json:"command"` Command string `json:"command"`
//ExtData string `json:"extdata"` Extbool bool `json:"extbool"`
Cmder int `josn:"cmder"`
SessionID string `json:"sessionid"`
IfDelay bool `josn:"ifDelay"` IfDelay bool `josn:"ifDelay"`
Delay string `json:"delay"` Delay string `json:"delay"`
} }
......
package public
import "errors"
var Error_NullCommand = errors.New("NULL COMMAND ERROR ")
var Error_NullRegQuery = errors.New("Null Reg Query")
\ No newline at end of file
...@@ -35,20 +35,25 @@ func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte { ...@@ -35,20 +35,25 @@ func DealMsgEnter(ip string,msgtype string,unmsg []byte) []byte {
// 具体消息实现 // 具体消息实现
// //
// 关于 report 报告 的 消息处理
func (rep *MJreport)Msg_Deal() interface{} { func (rep *MJreport)Msg_Deal() interface{} {
switch rep.Report{ switch rep.Report{
case Msg_Report_Offwork: case Msg_Report_Offwork:
return GJbackup() return GJbackup()
case Msg_Report_OverBak: case Msg_Report_OverBak:
SysMsgBox(rep.Computername,"备份结束") SysMsgBox(rep.Computername,"备份结束")
return GJexecAck(Msg_Exec_CloseWindows) return GJexecAck(Msg_Exec_CloseWindows)
case Msg_UpdateVersion:
case Msg_Report_UserStart:
case Msg_Report_DaemonStart:
if rep.Version == Version{ if rep.Version == Version{
return nil return nil
} else{ } else{
return GJexecAck(Msg_UpdateVersion) return GJexecAck(Msg_Exec_UpdateVersion)
} }
default: default:
PrintLog("Default Report Json ",rep.Report) PrintLog("Default Report Json ",rep.Report)
...@@ -57,23 +62,30 @@ func (rep *MJreport)Msg_Deal() interface{} { ...@@ -57,23 +62,30 @@ func (rep *MJreport)Msg_Deal() interface{} {
return nil return nil
} }
// 关于 exec 执行 的 消息处理
func (exec *MJexec)Msg_Deal()interface{}{ func (exec *MJexec)Msg_Deal()interface{}{
exec.IfDelay = false
switch exec.Instruction{ switch exec.Instruction{
case Msg_Exec_CloseWindows: case Msg_Exec_CloseWindows:
exec.Command = Msg_Exec_CloseWindows_cmd exec.Command = Msg_Exec_CloseWindows_cmd
exec.IfDelay = false
case Msg_Exec_CancelCloseWindows: case Msg_Exec_CancelCloseWindows:
exec.Command = Msg_Exec_CancelCloseWindows_cmd exec.Command = Msg_Exec_CancelCloseWindows_cmd
exec.IfDelay = false
case Msg_Exec_LogOffUser: case Msg_Exec_LogOffUser:
exec.Command = Msg_Exec_LogOffUser_cmd exec.Command = Msg_Exec_LogOffUser_cmd
exec.IfDelay = false
case Msg_Exec_RebootWindows: case Msg_Exec_RebootWindows:
exec.Command = Msg_Exec_RebootWindows_cmd exec.Command = Msg_Exec_RebootWindows_cmd
exec.IfDelay = false
case Msg_Exec_UpdateVersion:
exec.Command = Msg_Exec_UpdateVersion_cmd
} }
switch exec.Status{ switch exec.Status{
...@@ -84,12 +96,47 @@ func (exec *MJexec)Msg_Deal()interface{}{ ...@@ -84,12 +96,47 @@ func (exec *MJexec)Msg_Deal()interface{}{
return exec return exec
case Msg_Exec_State_Ack: case Msg_Exec_State_Ack:
// 进行延迟
if exec.IfDelay {Delay(&exec.Delay)} if exec.IfDelay {Delay(&exec.Delay)}
Execcmd_nowait(exec.Command)
// 区分执行者
switch exec.Cmder{
case Msg_Exec_Cmder_ADServer:
switch exec.Instruction{
// 软件安装
case Msg_Exec_InstallSoftware:
// 对于 msi 格式
// 从\\adserver安装
// 共享则需要everyone的读取权限
if HasSuffix(&exec.Command,".msi"){
full_cmd := "msiexec /i " + Env_ADSoftlike + `\` + exec.Command + " /qb"
PsExec_sdi(exec.Computername,full_cmd,exec.SessionID)
} else {
// 对于 exe 格式
// 从 ADMIN$ 复制到C:\windows
// 如果文件存在,则执行C:\windows目录下的文件
if exec.Extbool {
PsExec_sdi(exec.Computername,Dir_Windows + exec.Command,exec.SessionID)
} else {
PsExec_sdic(exec.Computername,Env_ADsoftware_local + exec.Command,exec.SessionID)
}
}
}
default:
Execcmd_nowait(exec.Command)
}
} }
return nil return nil
} }
// 关于 backup 备份 的 消息处理
func (bak * MJbackup)Msg_Deal() interface{}{ func (bak * MJbackup)Msg_Deal() interface{}{
switch bak.Status{ switch bak.Status{
...@@ -97,8 +144,8 @@ func (bak * MJbackup)Msg_Deal() interface{}{ ...@@ -97,8 +144,8 @@ func (bak * MJbackup)Msg_Deal() interface{}{
if !PrimaryUser(bak.Username) { return nil } if !PrimaryUser(bak.Username) { return nil }
bak.Username = Env_username bak.Username = User_name
bak.Computername = Env_computername bak.Computername = User_computername
bak.Explain = "Backup Start" bak.Explain = "Backup Start"
bak.Status = Msg_Backup_Status_If bak.Status = Msg_Backup_Status_If
bak.Version = BackupVersion bak.Version = BackupVersion
...@@ -120,9 +167,9 @@ func (bak * MJbackup)Msg_Deal() interface{}{ ...@@ -120,9 +167,9 @@ func (bak * MJbackup)Msg_Deal() interface{}{
//判断是否有最新版本的文件是否存在 //判断是否有最新版本的文件是否存在
//C:\Users\Public\Documents\AD-Control\0416tengfei.ffs_batch //C:\Users\Public\Documents\AD-Control\0416tengfei.ffs_batch
if NotExist(bak.BatchFileName){ if NotExist(bak.BatchFileName){
bak.BatchFileExist = true
}else{
bak.BatchFileExist = false bak.BatchFileExist = false
}else{
bak.BatchFileExist = true
} }
SendServer(bak) SendServer(bak)
return nil return nil
...@@ -160,7 +207,7 @@ func (bak * MJbackup)Msg_Deal() interface{}{ ...@@ -160,7 +207,7 @@ func (bak * MJbackup)Msg_Deal() interface{}{
return bak return bak
case Msg_Backup_Status_Run: case Msg_Backup_Status_Run:
SysMsgBox(bak.Computername,bak.Username + " 开始备份") SysMsgBox(bak.Computername,bak.Username + " 开始备份")
PsExecRemote_sd(bak.Computername,Env_FreeFileSyncExe + " "+ bak.BatchFileName) PsExec_sd(bak.Computername,Env_FreeFileSyncExe + " "+ bak.BatchFileName)
case Msg_Backup_Status_Error: case Msg_Backup_Status_Error:
PrintLog(bak.Explain) PrintLog(bak.Explain)
default: default:
...@@ -171,84 +218,3 @@ func (bak * MJbackup)Msg_Deal() interface{}{ ...@@ -171,84 +218,3 @@ func (bak * MJbackup)Msg_Deal() interface{}{
} }
//
// quickly Get & Set Json
//
// Report
func GJreport(s string,who string) interface{}{
var rep MJreport
rep.init(s)
if who != "" { rep.Username = who }
return rep
}
func (rep * MJreport)init(Report string) {
rep.Username = Env_username
rep.Username = Env_username
rep.Computername = Env_computername
rep.MsgType = Msg_Report
rep.Report = Report
rep.Version = Version
}
func (rep * MJreport)PrintExplain(){
PrintLog(rep.Computername,rep.Username,rep.Explain)
}
// Exec
func GJexec(s string) MJexec{
var rep MJexec
rep.init(s)
return rep
}
func GJexecAck(s string) interface{}{
var rep MJexec
rep.init(s)
rep.Status = Msg_Exec_State_Ack
return rep
}
func GJexecUserCmd(s string) interface{}{
var rep MJexec
rep.init("")
rep.Command = s
rep.Status = Msg_Exec_State_Ack
return rep
}
func (exec * MJexec)init(s string){
exec.Username = Env_username
exec.Computername = Env_computername
exec.MsgType = Msg_Exec
exec.Instruction = s
//exec.Command = cmd
exec.Status = Msg_Exec_State_Request
exec.IfDelay = false
exec.Delay = Rand(RandMax)
}
// Backup
func GJbackup()interface{}{
var rep MJbackup
rep.init()
return rep
}
func (bak * MJbackup)init() {
bak.MsgType = Msg_Backup
bak.Version = BackupVersion
bak.Status = Msg_Backup_Status_Start
bak.Version = Version
}
func (bak * MJbackup)Errorf(s string){
bak.Status = Msg_Backup_Status_Error
bak.Explain = "Backup Error: " + bak.Computername + " -> " + s
}
func (bak * MJbackup)PrintExplain(){
PrintLog(bak.Username,bak.Status,bak.Explain)
}
\ No newline at end of file
package public
//
// quickly Get & Set Json
//
// Report
func GJreport(s string,who string) interface{}{
var rep MJreport
rep.init(s)
if who != "" { rep.Username = who }
return rep
}
func (rep * MJreport)init(Report string) {
rep.Username = User_name
rep.Username = User_name
rep.Computername = User_computername
rep.MsgType = Msg_Report
rep.Report = Report
rep.Version = Version
}
func (rep * MJreport)PrintExplain(){
PrintLog(rep.Computername,rep.Username,rep.Explain)
}
// Exec
func GJexec(s string) MJexec{
var rep MJexec
rep.init(s)
return rep
}
func GJexecAck(s string) interface{}{
var rep MJexec
rep.init(s)
rep.Status = Msg_Exec_State_Ack
return rep
}
func GJexecInstallSoftware(b bool,s string) interface{}{
var exec MJexec
exec.init(s)
exec.Status = Msg_Exec_State_Ack
exec.Extbool = b
exec.Cmder = Msg_Exec_Cmder_ADServer
exec.Instruction = Msg_Exec_InstallSoftware
exec.Command = s
return exec
}
func GJexecUserCmd(s string) interface{}{
var rep MJexec
rep.init("")
rep.Command = s
rep.Status = Msg_Exec_State_Ack
return rep
}
func (exec * MJexec)init(s string){
exec.Username = User_name
exec.Computername = User_computername
exec.MsgType = Msg_Exec
exec.Instruction = s
exec.SessionID = User_sessionID
exec.Cmder = Msg_Exec_Cmder_LocalDaemon
exec.Status = Msg_Exec_State_Request
exec.IfDelay = false
exec.Delay = Rand(RandMax)
}
// Backup
func GJbackup()interface{}{
var rep MJbackup
rep.init()
return rep
}
func (bak * MJbackup)init() {
bak.MsgType = Msg_Backup
bak.Version = BackupVersion
bak.Status = Msg_Backup_Status_Start
bak.Version = Version
}
func (bak * MJbackup)Errorf(s string){
bak.Status = Msg_Backup_Status_Error
bak.Explain = "Backup Error: " + bak.Computername + " -> " + s
}
func (bak * MJbackup)PrintExplain(){
PrintLog(bak.Username,bak.Status,bak.Explain)
}
\ No newline at end of file
...@@ -72,8 +72,9 @@ func JsonToByte(v interface{}) []byte{ ...@@ -72,8 +72,9 @@ func JsonToByte(v interface{}) []byte{
// 存在文件 // 存在文件
func Exist(path string) bool { func Exist(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息 _, err := os.Stat(path) // os.Stat获取文件信息
return os.IsExist(err)
return !os.IsNotExist(err)
} }
// 不存在文件 // 不存在文件
func NotExist(path string) bool { func NotExist(path string) bool {
...@@ -144,7 +145,7 @@ func Delay(s * string){ ...@@ -144,7 +145,7 @@ func Delay(s * string){
time.Sleep(time.Duration(i) * time.Second) time.Sleep(time.Duration(i) * time.Second)
} }
func AdminUser( )bool{ func AdminUser( )bool{
switch Env_username{ switch User_name{
case AD_User_taotengfei: case AD_User_taotengfei:
return true return true
case AD_User_tengfei: case AD_User_tengfei:
...@@ -155,7 +156,7 @@ func AdminUser( )bool{ ...@@ -155,7 +156,7 @@ func AdminUser( )bool{
return false return false
} }
func TheUser(s string)bool{ func TheUser(s string)bool{
if s == Env_username || AdminUser() { return true} if s == User_name || AdminUser() { return true}
return false return false
} }
func ReadDir(s string) ([]os.FileInfo,error){ func ReadDir(s string) ([]os.FileInfo,error){
...@@ -166,4 +167,7 @@ func ReadDir(s string) ([]os.FileInfo,error){ ...@@ -166,4 +167,7 @@ func ReadDir(s string) ([]os.FileInfo,error){
// f,err := ioutil.ReadDir(s) // f,err := ioutil.ReadDir(s)
// var v []byte // var v []byte
// append()v // append()v
// } // }
\ No newline at end of file func HasSuffix(str * string,sub string)bool{
return strings.HasSuffix(*str,sub)
}
\ No newline at end of file
...@@ -4,33 +4,144 @@ import( ...@@ -4,33 +4,144 @@ import(
"os/exec" "os/exec"
"github.com/lxn/walk" "github.com/lxn/walk"
"strings" "strings"
registry "github.com/golang/sys/windows/registry"
) )
func Execcmd_nowait(cmdargs string){
//
//
// local exec
//
func execcmd_base(cmdargs string) (string,[]string,error){
if cmdargs == "" { if cmdargs == "" {
PrintLog("NULL COMMAND ERROR ") return "",nil,Error_NullCommand
return }
var app string
var appargs []string
spaceindex:=strings.Index(cmdargs," ")
if spaceindex != -1{
app = cmdargs[:spaceindex]
appargs = strings.Split(cmdargs[spaceindex+1:]," ")
}else{
app = cmdargs
appargs[0] = ""
} }
PrintLog(cmdargs) PrintLog(cmdargs)
// exec.Command
// 只接受 shutdown,-s,-t,0 return app,appargs,nil
// 不接受 shutdown -s -t 0 }
var err error func Execcmd_nowait(cmdargs string){
app := cmdargs[:strings.Index(cmdargs," ")] app,appargs,err :=execcmd_base(cmdargs)
appargs := strings.Split(cmdargs[len(app)+1:]," ") if err !=nil{
err = exec.Command(app,appargs...).Start() PrintLog(err)
return
if err !=nil { }
if err := exec.Command(app,appargs...).Start();err !=nil {
PrintLog(err)
}
}
func Execcmd_wait(cmdargs string){
app,appargs,err :=execcmd_base(cmdargs)
if err !=nil{
PrintLog(err)
return
}
cmd := exec.Command(app,appargs...)
if err := cmd.Start(); err != nil {
PrintLog(err) PrintLog(err)
} }
PrintLog("Waiting for command to finish...")
err = cmd.Wait()
PrintLog("Command finished with error: ",err)
}
func Execcmd_output(cmdargs string)[]byte{
app,appargs,err :=execcmd_base(cmdargs)
if err !=nil{
PrintLog(err)
return nil
}
if out,err2 := exec.Command(app,appargs...).CombinedOutput();err2 !=nil {
PrintLog(err2)
}else{
return out
}
return nil
} }
func PsExecRemote_sd(pc ,cmd string) { //
//
// remote exec
//
func PsExec_sd(pc ,cmd string) {
psExecCommand := `psexec \\` + pc + " -s -d "+cmd psExecCommand := `psexec \\` + pc + " -s -d "+cmd
Execcmd_nowait(psExecCommand) Execcmd_nowait(psExecCommand)
} }
func PsExec_sdi(pc ,cmd ,sessionid string) {
psExecCommand := `psexec \\` + pc + " -s -d -i "+sessionid +" "+cmd
Execcmd_nowait(psExecCommand)
}
func PsExec_sdic(pc ,cmd ,sessionid string) {
psExecCommand := `psexec \\` + pc + " -s -d -i "+sessionid + " -c "+cmd
Execcmd_nowait(psExecCommand)
}
//
//
// msg show
//
func Msg(message string) { func Msg(message string) {
walk.MsgBox(*new(walk.Form), "提示", message, walk.MsgBoxIconInformation) walk.MsgBox(*new(walk.Form), "提示", message, walk.MsgBoxIconInformation)
} }
func SysMsgBox(pc,message string){ func SysMsgBox(pc,message string){
Execcmd_nowait("msg * /SERVER:"+pc+" /TIME:60 "+ message) Execcmd_nowait("msg * /SERVER:"+pc+" /TIME:60 "+ message)
} }
\ No newline at end of file
//
//
// regedit
//
func reg_prase(root * string) registry.Key{
switch *root{
case HKCU:
return registry.CURRENT_USER
case HKU:
return registry.USERS
case HKLM:
return registry.LOCAL_MACHINE
}
return registry.LOCAL_MACHINE
}
func Reg_query_item_one(root ,path string) string {
PrintLog(root,`\`,path)
if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.READ);kerr==nil{
defer k.Close()
if sk,err := k.ReadSubKeyNames(1); err ==nil{
return sk[0]
} else{
PrintLog(err)
return ""
}
} else {
PrintLog(kerr)
return ""
}
}
func Reg_query_key_one(root, path, key string) string {
if k, kerr := registry.OpenKey(reg_prase(&root),path, registry.READ);kerr==nil{
defer k.Close()
if sk,_,err := k.GetStringValue(key); err ==nil{
PrintLog(root,path,key,` -> `,sk)
return sk
} else{
PrintLog(err)
return ""
}
} else {
PrintLog(kerr)
return ""
}
}
package public
import (
"bytes"
"encoding/hex"
"errors"
"fmt"
"net"
"strings"
)
// 源码地址
// https://github.com/zzustu/wol
// 网络唤醒魔包技术白皮书地址
// https://www.amd.com/system/files/TechDocs/20213.pdf
func Wol(mac string) error{
//nic := ""
hw := strings.Replace(strings.Replace(mac, ":", "", -1), "-", "", -1)
if len(hw) != 12 {
return fmt.Errorf("MAC: [%s] 输入不正确.\n", mac)
}
macHex, err := hex.DecodeString(hw)
if err != nil {
return fmt.Errorf("MAC: [%s] 输入不正确.\n", mac)
}
// 广播MAC地址 FF:FF:FF:FF:FF:FF
var bcast = []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
var buff bytes.Buffer
buff.Write(bcast)
for i := 0; i < 16; i++ {
buff.Write(macHex)
}
// 获得唤醒魔包
mp := buff.Bytes()
if len(mp) != 102 {
return fmt.Errorf("MAC: [%s] 输入不正确.\n", mac)
}
return sendMagicPacket(mp, "")
}
// 向指定网卡发送唤醒魔包
func sendMagicPacket(mp []byte, nic string)error{
sender := net.UDPAddr{}
if len(nic) != 0 {
ip, err := interfaceIPv4ByName(nic)
if err != nil {
return fmt.Errorf("网卡[%s]错误: %s", nic, err)
}
sender.IP = ip
}
target := net.UDPAddr{
IP: net.IPv4bcast,
}
conn, err := net.DialUDP("udp", &sender, &target)
if err != nil {
return fmt.Errorf("创建UDP错误:%v", err)
}
defer func() {
_ = conn.Close()
}()
_, err = conn.Write(mp)
if err != nil {
return fmt.Errorf("唤醒失败:[%s]", err)
} else {
return nil
}
}
// 通过网卡名称获取该网卡绑定的IPv4
func interfaceIPv4ByName(nic string) (net.IP, error) {
inter, err := net.InterfaceByName(nic)
if err != nil {
return nil, err
}
// 检查网卡是否正在工作
if (inter.Flags & net.FlagUp) == 0 {
return nil, errors.New("网卡未工作")
}
addrs, err := inter.Addrs()
if err != nil {
return nil, err
}
for _, addr := range addrs {
if ip, ok := addr.(*net.IPNet); ok {
if ipv4 := ip.IP.To4(); ipv4 != nil {
return ipv4, nil
}
}
}
return nil, errors.New("找不到网卡绑定的IP")
}
\ No newline at end of file
...@@ -124,9 +124,11 @@ func menuInitSoftwareInstall(ni * walk.NotifyIcon){ ...@@ -124,9 +124,11 @@ func menuInitSoftwareInstall(ni * walk.NotifyIcon){
sysmenu.SetVisible(true) sysmenu.SetVisible(true)
sysmenu.SetEnabled(true) sysmenu.SetEnabled(true)
} }
func siEnter_admin(soft string){ func siEnter_admin(softname string){
go public.Msg("等待弹出安装窗口,请稍等。。") go public.Msg("等待弹出安装窗口,请稍等。。")
public.SendDaemonExec(public.Env_ADSoftlike + `\` + soft) ifFile := public.Exist(`C:\windows\`+softname)
public.SendServer(public.GJexecInstallSoftware(ifFile,softname))
} }
......
No preview for this file type
...@@ -9,9 +9,7 @@ import ( ...@@ -9,9 +9,7 @@ import (
"AD-Control/public" "AD-Control/public"
) )
func userInit(){ func userInit(){
public.SendServerReport(public.Msg_UpdateVersion)
public.SendServerReport(public.Msg_Report_UserStart) public.SendServerReport(public.Msg_Report_UserStart)
} }
func menuInit(ni * walk.NotifyIcon){ func menuInit(ni * walk.NotifyIcon){
......
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