Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
AD-Control-Golang
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陶腾飞
AD-Control-Golang
Commits
8f00eec0
Commit
8f00eec0
authored
Oct 18, 2020
by
陶腾飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2020/10/18 v1.9.0
parent
e0c15c26
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
231 additions
and
105 deletions
+231
-105
.gitignore
+3
-2
README.MD
+5
-2
adct/adct.go
+40
-53
daemon/daemon.go
+2
-2
public/env.go
+5
-6
public/error.go
+1
-0
public/ldap.go
+28
-3
public/msg_deal.go
+29
-4
public/msg_init.go
+25
-5
public/print.go
+4
-0
public/public.go
+1
-2
public/send.go
+14
-10
public/user.go
+14
-0
public/win.go
+19
-0
public/wol.go
+16
-2
users/menu.go
+21
-9
users/users.go
+4
-5
No files found.
.gitignore
View file @
8f00eec0
...
@@ -3,4 +3,5 @@ testmain/
...
@@ -3,4 +3,5 @@ testmain/
exe/
exe/
*.bat
*.bat
*.ps1
*.ps1
*.exe
*.exe
\ No newline at end of file
.vscode/
\ No newline at end of file
README.MD
View file @
8f00eec0
...
@@ -21,7 +21,7 @@ UI:
...
@@ -21,7 +21,7 @@ UI:
3.
文件共享
3.
文件共享
### 2.
主控
使用的Daemon.exe
### 2.
域控制器
使用的Daemon.exe
运行方式:
运行方式:
`go run .\daemon.go`
`go run .\daemon.go`
...
@@ -38,6 +38,7 @@ UI:
...
@@ -38,6 +38,7 @@ UI:
1.
定时操作
1.
定时操作
2.
汇报情况
2.
汇报情况
3.
强制备份
3.
强制备份
4.
主机唤醒
...
@@ -52,8 +53,8 @@ UI:
...
@@ -52,8 +53,8 @@ UI:
-
2020/06/17 v1.1.0 更新在注册表中用户状态记录和修正电源状态的记录
-
2020/06/17 v1.1.0 更新在注册表中用户状态记录和修正电源状态的记录
-
2020/06/19 v1.1.1 修复备的Bug
-
2020/06/19 v1.1.1 修复备的Bug
-
2020/07/07 v1.1.2 优化备份策略
-
2020/07/07 v1.1.2 优化备份策略
-
2020/07/22 v1.3.1 修复文件共享打开失败问题,支持对非域用户的唤醒
-
2020/07/09 v1.2.0 更新批量打开工具
-
2020/07/09 v1.2.0 更新批量打开工具
-
2020/07/22 v1.3.1 修复文件共享打开失败问题,支持对非域用户的唤醒
-
2020/07/20 v1.3.0 升级备份,优化注册表值记录,启动企业微信知微运维平台
-
2020/07/20 v1.3.0 升级备份,优化注册表值记录,启动企业微信知微运维平台
-
2020/07/22 v1.3.1 修复文件共享打开失败问题,支持对非域用户的唤醒
-
2020/07/22 v1.3.1 修复文件共享打开失败问题,支持对非域用户的唤醒
-
2020/07/27 v1.4.0 更新图标显示/隐藏工具,优化exec消息处理逻辑,优化企业微信知微运维平台
-
2020/07/27 v1.4.0 更新图标显示/隐藏工具,优化exec消息处理逻辑,优化企业微信知微运维平台
...
@@ -66,6 +67,8 @@ UI:
...
@@ -66,6 +67,8 @@ UI:
-
2020/08/21 v1.8.0 合并企业微信推送,转型HTTP服务器,增加活动检测,用户备份升级
-
2020/08/21 v1.8.0 合并企业微信推送,转型HTTP服务器,增加活动检测,用户备份升级
-
2020/08/21 v1.8.1 解决无法处理收到的消息问题
-
2020/08/21 v1.8.1 解决无法处理收到的消息问题
-
2020/08/26 v1.8.2 解决因消息框未返回而出现的关机停止问题
-
2020/08/26 v1.8.2 解决因消息框未返回而出现的关机停止问题
-
2020/08/26 v1.8.4 解决个人共享读取失败的问题
-
2020/10/18 v1.9.0 修复双向备份文件Bug,针对704室主机唤醒做调整,增加远程唤醒功能
## 其他说明
## 其他说明
...
...
adct/adct.go
View file @
8f00eec0
...
@@ -7,29 +7,23 @@ import (
...
@@ -7,29 +7,23 @@ import (
func
initLog
(){
func
initLog
(){
var
logpath
string
var
logpath
string
// 作为主控启动
// 作为PC启动
if
pub
.
Adserver
()
{
if
pub
.
RunAsPC
(
pub
.
User_computername
){
logpath
=
pub
.
Dir_AD_log
logpath
=
`C:\windows\system32\`
}
else
{
// 作为用户启动
// 作为PC启动
}
else
{
if
pub
.
RunAsPC
(
pub
.
User_computername
){
logpath
=
pub
.
Dir_userprofile
+
`\`
logpath
=
`C:\windows\system32\`
// 作为用户启动
}
else
{
logpath
=
pub
.
Dir_userprofile
+
`\`
}
}
}
pub
.
Loger
=
pub
.
NewLoger
(
logpath
+
"adct.log"
)
pub
.
Loger
=
pub
.
NewLoger
(
logpath
+
"adct.log"
)
}
}
func
main
(){
func
main
(){
initLog
()
initLog
()
var
reportText
=
flag
.
String
(
pub
.
Msg_Report
,
""
,
"report to AD"
)
var
reportText
=
flag
.
String
(
pub
.
Msg_Report
,
""
,
"report to AD"
)
var
execText
=
flag
.
String
(
pub
.
Msg_Exec
,
""
,
"exec to LocalDaemon"
)
var
passText
=
flag
.
String
(
"pass"
,
""
,
"input passwork,but not need"
)
var
passText
=
flag
.
String
(
"pass"
,
""
,
"input passwork,but not need"
)
var
wolmacText
=
flag
.
String
(
"wolmac"
,
""
,
"input
mac address for wake
pc"
)
var
wolmacText
=
flag
.
String
(
"wolmac"
,
""
,
"input
MACAddress for waking
pc"
)
var
wol
userText
=
flag
.
String
(
"woluser"
,
""
,
"input name for walk
pc"
)
var
wol
hostText
=
flag
.
String
(
"wolhost"
,
""
,
"input hostname for waking
pc"
)
var
wolallText
=
flag
.
Bool
(
"wolall"
,
false
,
"wake all Domain Computer"
)
var
wolallText
=
flag
.
Bool
(
"wolall"
,
false
,
"wake all Domain Computer"
)
var
hourText
=
flag
.
Bool
(
"hour"
,
false
,
"exec task at the time"
)
var
hourText
=
flag
.
Bool
(
"hour"
,
false
,
"exec task at the time"
)
...
@@ -37,9 +31,8 @@ func main(){
...
@@ -37,9 +31,8 @@ func main(){
if
*
hourText
{
flag_hour
(
);
return
}
if
*
hourText
{
flag_hour
(
);
return
}
if
*
reportText
!=
""
{
flag_report
(
reportText
);
return
}
if
*
reportText
!=
""
{
flag_report
(
reportText
);
return
}
if
*
execText
!=
""
{
flag_exec
(
execText
);
return
}
if
*
wolmacText
!=
""
{
flag_wolmac
(
wolmacText
);
return
}
if
*
wolmacText
!=
""
{
flag_wolmac
(
wolmacText
);
return
}
if
*
wol
userText
!=
""
{
flag_woluser
(
woluserText
,
passText
);
return
}
if
*
wol
hostText
!=
""
{
flag_wolhost
(
wolhostText
);
return
}
if
*
wolallText
{
flag_wolall
(
passText
);
return
}
if
*
wolallText
{
flag_wolall
(
passText
);
return
}
return
return
...
@@ -49,9 +42,6 @@ func flag_report(s *string){
...
@@ -49,9 +42,6 @@ func flag_report(s *string){
pub
.
SendServerReport
(
*
s
)
pub
.
SendServerReport
(
*
s
)
}
}
func
flag_exec
(
s
*
string
){
pub
.
SendServerExec
(
*
s
)
}
func
flag_hour
(){
func
flag_hour
(){
nh
:=
pub
.
GetHour
()
nh
:=
pub
.
GetHour
()
switch
nh
{
switch
nh
{
...
@@ -62,51 +52,48 @@ func flag_hour(){
...
@@ -62,51 +52,48 @@ func flag_hour(){
}
}
}
}
func
flag_wolmac
(
mac
*
string
){
func
flag_wolmac
(
mac
*
string
){
if
err
:=
pub
.
Wol
(
*
mac
);
err
!=
nil
{
//直接指定mac地址,不带主机名参数
pub
.
PntError
(
err
)
pub
.
Wol_enter
(
""
,
mac
)
}
else
{
pub
.
PntWol
(
*
mac
)
}
}
}
func
flag_wol
user
(
user
,
pass
*
string
){
func
flag_wol
host
(
pc
*
string
){
pcgroup
:=
pub
.
Reg_query_item
(
mac
:=
pub
.
Reg_query_key_one
(
pub
.
Reg_Root_ac
,
pub
.
Reg_Root_ac
,
pub
.
Reg_Path_home_ac
)
pub
.
Reg_Path_home_ac
+*
pc
,
pub
.
PrintLog
(
pcgroup
)
pub
.
Reg_Name_MACaddress
)
for
_
,
pc
:=
range
pcgroup
{
pub
.
PntInfof
(
"pc:%s,mac:%s"
,
*
pc
,
mac
)
priuser
:=
pub
.
Reg_query_key_one
(
pub
.
Wol_enter
(
*
pc
,
&
mac
)
pub
.
Reg_Root_ac
,
pub
.
Reg_Path_home_ac
+
pc
,
//暂未开发
pub
.
Reg_Name_PrimaryUser
)
if
priuser
==
*
user
{
mac
:=
pub
.
Reg_query_key_one
(
pub
.
Reg_Root_ac
,
pub
.
Reg_Path_home_ac
+
pc
,
pub
.
Reg_Name_MACaddress
)
flag_wolmac
(
&
mac
)
pub
.
PntInfof
(
"Primary User: %s,hostname:%s
\n
"
,
*
user
,
mac
)
}
}
}
}
func
flag_wolall
(
pass
*
string
){
func
flag_wolall
(
pass
*
string
){
pcgroup
:=
pub
.
LDAP_Get_PCGroup
(
pass
)
pclist
,
err
:=
pub
.
Reg_query_list
(
pub
.
Reg_Root_ac
,
pub
.
Reg_Path_home_ac
)
limit
:=
1
if
err
!=
nil
{
for
i
,
pc
:=
range
pcgroup
{
pub
.
PntError
(
err
)
}
//limit :=1
for
_
,
pc
:=
range
pclist
{
mac
:=
pub
.
Reg_query_key_one
(
mac
:=
pub
.
Reg_query_key_one
(
pub
.
Reg_Root_ac
,
pub
.
Reg_Root_ac
,
pub
.
Reg_Path_home_ac
+
pc
,
pub
.
Reg_Path_home_ac
+
pc
,
pub
.
Reg_Name_MACaddress
)
pub
.
Reg_Name_MACaddress
)
// 没有主机信息没有记录到注册表
if
mac
==
""
{
if
mac
==
""
{
pub
.
PntError
(
pc
,
"查找注册表失败"
)
pub
.
PntError
(
pc
,
"查找注册表失败"
)
continue
continue
}
else
{
}
else
{
if
limit
<=
10
{
// 延时计数重置
pub
.
Delay
(
10
)
// if limit <= 10 {
limit
=
0
// pub.Delay(10)
}
// limit=0
pub
.
PrintLog
(
i
,
pc
,
mac
)
// }
pub
.
RandDelay
(
10
)
flag_wolmac
(
&
mac
)
// 唤醒入口
limit
+=
1
pub
.
Wol_enter
(
pc
,
&
mac
)
// 随机延时
//pub.RandDelay(10)
//limit +=1
}
}
}
}
...
...
daemon/daemon.go
View file @
8f00eec0
...
@@ -7,8 +7,8 @@ import (
...
@@ -7,8 +7,8 @@ import (
func
main
()
{
func
main
()
{
// 写入日志
//
在家目录中
写入日志
pub
.
Loger
=
pub
.
NewLoger
(
pub
.
Dir_
AD_log
+
`
daemon.log`
)
pub
.
Loger
=
pub
.
NewLoger
(
pub
.
Dir_
userprofile
+
`\
daemon.log`
)
pub
.
PrintLog
(
"start daemon!"
)
pub
.
PrintLog
(
"start daemon!"
)
...
...
public/env.go
View file @
8f00eec0
...
@@ -3,10 +3,12 @@ package public
...
@@ -3,10 +3,12 @@ package public
// AD-Control //
// AD-Control //
const
Host_adserver
string
=
"ADSERVER"
const
Host_adserver
string
=
"ADSERVER"
const
ADServerDaemon
string
=
Host_adserver
+
DaemonListen
const
Host_thserver
string
=
"THSERVER"
const
DaemonListen
string
=
":16823"
const
DaemonListen
string
=
":16823"
const
Version
string
=
"1.8.2"
const
ADServerDaemon
string
=
Host_adserver
+
DaemonListen
const
Bak_Version
string
=
"0819"
const
THServerDaemon
string
=
Host_thserver
+
DaemonListen
const
Version
string
=
"1.9.0"
const
Bak_Version
string
=
"1013"
var
Active
bool
=
true
var
Active
bool
=
true
...
@@ -18,7 +20,6 @@ var User_userdomain string = GetEnv("USERDOMAIN")
...
@@ -18,7 +20,6 @@ var User_userdomain string = GetEnv("USERDOMAIN")
var
User_name
string
=
GetEnv
(
"USERNAME"
)
var
User_name
string
=
GetEnv
(
"USERNAME"
)
var
User_name_display
string
=
GetEnvFqdn
(
"CN"
)
var
User_name_display
string
=
GetEnvFqdn
(
"CN"
)
var
User_dept
string
=
GetEnv
(
"DEPT"
)
var
User_dept
string
=
GetEnv
(
"DEPT"
)
var
User_dept_desplay
string
=
GetEnv
(
"DEPTZH"
)
var
User_sid
string
=
Reg_query_key_one
(
HKCU
,
`Software\Microsoft\Windows\CurrentVersion\FileAssociations`
,
"UserSid"
)
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`
)
var
User_sessionID
string
=
Reg_query_item_one
(
HKU
,
User_sid
+
`\Volatile Environment`
)
...
@@ -48,8 +49,6 @@ const Dir_DCSave string = `D:\DomainUserBackupV2`
...
@@ -48,8 +49,6 @@ const Dir_DCSave string = `D:\DomainUserBackupV2`
var
Dir_WeDrive
=
[
2
]
string
{
Dir_appdata
+
`\Tencent\WXWork\Data`
,
Dir_userprofile
+
`\Documents\WXWork`
}
var
Dir_WeDrive
=
[
2
]
string
{
Dir_appdata
+
`\Tencent\WXWork\Data`
,
Dir_userprofile
+
`\Documents\WXWork`
}
var
Dir_Be
=
[]
string
{
Dir_DocuBase
}
var
Dir_Be
=
[]
string
{
Dir_DocuBase
}
var
Dir_Sync_Config
string
=
Dir_appdata
+
`\Sync App Settings\_SYNCAPP\`
var
Dir_Sync_Config
string
=
Dir_appdata
+
`\Sync App Settings\_SYNCAPP\`
var
Dir_AD_log
string
=
`H:\logs\`
// Local File //
// Local File //
...
...
public/error.go
View file @
8f00eec0
...
@@ -14,6 +14,7 @@ var Error_Null_App_Sync = errors.New("Not Find Application AllWay Sync")
...
@@ -14,6 +14,7 @@ var Error_Null_App_Sync = errors.New("Not Find Application AllWay Sync")
var
Error_Null_File
=
errors
.
New
(
"Not Find File"
)
var
Error_Null_File
=
errors
.
New
(
"Not Find File"
)
var
Error_Null_Folder
=
errors
.
New
(
"Not File Folder"
)
var
Error_Null_Folder
=
errors
.
New
(
"Not File Folder"
)
var
Error_Null_Icon_File
=
errors
.
New
(
"Not File Icon File"
)
var
Error_Null_Icon_File
=
errors
.
New
(
"Not File Icon File"
)
var
Error_Null_Reg_Query
=
errors
.
New
(
"Not Found Reg Query Result"
)
var
Error_Fail_File_Open
=
errors
.
New
(
"Fail File Open"
)
var
Error_Fail_File_Open
=
errors
.
New
(
"Fail File Open"
)
var
Error_Fail_Token
=
errors
.
New
(
"Get Token Fail"
)
var
Error_Fail_Token
=
errors
.
New
(
"Get Token Fail"
)
...
...
public/ldap.go
View file @
8f00eec0
...
@@ -4,14 +4,13 @@ import (
...
@@ -4,14 +4,13 @@ import (
ldap
"gopkg.in/ldap.v3"
ldap
"gopkg.in/ldap.v3"
)
)
func
LDAP_Get_PCGroup
(
pass
*
string
)
[]
string
{
func
LDAP_Get_PCGroup
()
[]
string
{
user
:=
AD_User_zhiwei
l
,
err
:=
ldap
.
DialURL
(
"ldap://127.0.0.1:389"
)
l
,
err
:=
ldap
.
DialURL
(
"ldap://127.0.0.1:389"
)
if
err
!=
nil
{
if
err
!=
nil
{
PntError
(
err
)
PntError
(
err
)
}
}
defer
l
.
Close
()
defer
l
.
Close
()
if
err
=
l
.
Bind
(
user
,
*
pass
);
err
!=
nil
{
if
err
=
l
.
Bind
(
AD_User_zhiwei
,
"1Q2W3e4r"
);
err
!=
nil
{
PntError
(
err
)
PntError
(
err
)
}
}
searchRequest
:=
ldap
.
NewSearchRequest
(
searchRequest
:=
ldap
.
NewSearchRequest
(
...
@@ -34,4 +33,29 @@ func LDAP_Get_PCGroup(pass * string) []string {
...
@@ -34,4 +33,29 @@ func LDAP_Get_PCGroup(pass * string) []string {
pcgroup
[
i
]
=
entry
.
GetAttributeValue
(
"cn"
)
pcgroup
[
i
]
=
entry
.
GetAttributeValue
(
"cn"
)
}
}
return
pcgroup
return
pcgroup
}
func
LDAP_nameTopinyin
(
name
string
)
string
{
l
,
err
:=
ldap
.
DialURL
(
"ldap://127.0.0.1:389"
)
if
err
!=
nil
{
PntError
(
err
)
}
defer
l
.
Close
()
if
err
=
l
.
Bind
(
AD_User_zhiwei
,
"1Q2W3e4r"
);
err
!=
nil
{
PntError
(
err
)
}
searchRequest
:=
ldap
.
NewSearchRequest
(
//"ou=情报部门,dc=zhiweireach,dc=com",
"ou=情报部门,dc=zhiweireach,dc=com"
,
ldap
.
ScopeWholeSubtree
,
ldap
.
NeverDerefAliases
,
0
,
0
,
false
,
"(cn="
+
name
+
")"
,
//"(&(objectClass=organizationalPerson))",
[]
string
{
"sAMAccountName"
},
nil
,
)
sr
,
err
:=
l
.
Search
(
searchRequest
)
if
err
!=
nil
{
PntError
(
err
)
}
return
sr
.
Entries
[
0
]
.
GetAttributeValue
(
"sAMAccountName"
)
}
}
\ No newline at end of file
public/msg_deal.go
View file @
8f00eec0
...
@@ -50,7 +50,14 @@ func DealMsg(msgtype, url string, unmsg []byte) []byte {
...
@@ -50,7 +50,14 @@ func DealMsg(msgtype, url string, unmsg []byte) []byte {
ParseJson
(
unmsg
,
&
pmsg
)
ParseJson
(
unmsg
,
&
pmsg
)
ice
:=
pmsg
.
MsgDeal
()
ice
:=
pmsg
.
MsgDeal
()
ret
=
ReParseJson
(
&
ice
)
ret
=
ReParseJson
(
&
ice
)
// 唤醒 消息
case
Msg_Wake
:
var
pmsg
MJwake
ParseJson
(
unmsg
,
&
pmsg
)
ice
:=
pmsg
.
MsgDeal
()
ret
=
ReParseJson
(
&
ice
)
// 错误 消息
// 错误 消息
case
Msg_Error
:
case
Msg_Error
:
PntError
(
string
(
unmsg
))
PntError
(
string
(
unmsg
))
...
@@ -105,7 +112,7 @@ func (rep *MJreport)MsgDeal() interface{} {
...
@@ -105,7 +112,7 @@ func (rep *MJreport)MsgDeal() interface{} {
case
Msg_Report_WillTurnOnPC
:
case
Msg_Report_WillTurnOnPC
:
// 如果是被开机唤醒
o
// 如果是被开机唤醒
id
:=
rep
.
Reg_Query_ADDC
(
Reg_Name_BeWakedID
)
id
:=
rep
.
Reg_Query_ADDC
(
Reg_Name_BeWakedID
)
if
id
!=
""
{
if
id
!=
""
{
SendWxworkTextToAUser
(
id
,
"主机已启动,一切就绪~"
)
SendWxworkTextToAUser
(
id
,
"主机已启动,一切就绪~"
)
...
@@ -266,7 +273,7 @@ func (bak * MJbackup)MsgDeal() interface{}{
...
@@ -266,7 +273,7 @@ func (bak * MJbackup)MsgDeal() interface{}{
}
}
SendMsg
(
bak
.
MsgType
,
bak
)
Send
AD
Msg
(
bak
.
MsgType
,
bak
)
return
nil
return
nil
// 判断是否能进行备份
// 判断是否能进行备份
...
@@ -287,6 +294,23 @@ func (bak * MJbackup)MsgDeal() interface{}{
...
@@ -287,6 +294,23 @@ func (bak * MJbackup)MsgDeal() interface{}{
// 关于 wake 唤醒 的 消息处理
func
(
wake
*
MJwake
)
MsgDeal
()
interface
{}{
switch
wake
.
Instruction
{
case
Msg_Wake_Status_Req
:
wake
.
Instruction
=
Msg_Wake_Status_Over
go
Wol_enter
(
wake
.
Computername
,
&
wake
.
MACAddress
)
return
wake
case
Msg_Wake_Status_Over
:
return
nil
}
return
nil
}
// 关于 error 错误 的 消息处理
// 关于 error 错误 的 消息处理
func
(
err
*
MJerror
)
MsgDeal
()
interface
{}{
func
(
err
*
MJerror
)
MsgDeal
()
interface
{}{
...
@@ -296,6 +320,7 @@ func (err * MJerror)MsgDeal() interface{}{
...
@@ -296,6 +320,7 @@ func (err * MJerror)MsgDeal() interface{}{
// 关于 wxwork 企业微信 的 消息处理
// 关于 wxwork 企业微信 的 消息处理
func
(
wxwork
*
MJwxwork
)
MsgDealSend
()
{
func
(
wxwork
*
MJwxwork
)
MsgDealSend
()
{
...
@@ -344,7 +369,7 @@ func (wxwork * MJwxwork)MsgDealSend() {
...
@@ -344,7 +369,7 @@ func (wxwork * MJwxwork)MsgDealSend() {
}
}
// 进行唤醒
// 进行唤醒
go
Wol
(
mac
)
go
Wol
_enter
(
pc
,
&
mac
)
go
func
(
userid
string
){
go
func
(
userid
string
){
for
i
:=
0
;
i
<
10
;
i
++
{
for
i
:=
0
;
i
<
10
;
i
++
{
...
...
public/msg_init.go
View file @
8f00eec0
...
@@ -15,7 +15,7 @@ const Msg_Exec string = "exec"
...
@@ -15,7 +15,7 @@ const Msg_Exec string = "exec"
const
Msg_Backup
string
=
"backup"
const
Msg_Backup
string
=
"backup"
const
Msg_Error
string
=
"error"
const
Msg_Error
string
=
"error"
const
Msg_Wxwork
string
=
"wxwork"
const
Msg_Wxwork
string
=
"wxwork"
const
Msg_Wake
string
=
"wake"
// base word ////////////////////////////////////////////////////////////////
// base word ////////////////////////////////////////////////////////////////
...
@@ -81,6 +81,9 @@ const Msg_Exec_OpenAdminEXE string = "OpenAdmin"
...
@@ -81,6 +81,9 @@ const Msg_Exec_OpenAdminEXE string = "OpenAdmin"
// msg wkae type ////////////////////////////////////////////////////////////////
const
Msg_Wake_Status_Req
string
=
"WakeReq"
const
Msg_Wake_Status_Over
string
=
"WakeOver"
// wxwork event key ////////////////////////////////////////////////////////////////
// wxwork event key ////////////////////////////////////////////////////////////////
const
WXEK_zwDevopsPowerWake
string
=
"zwdevops_power_wake"
const
WXEK_zwDevopsPowerWake
string
=
"zwdevops_power_wake"
...
@@ -109,7 +112,6 @@ type MJbase struct{
...
@@ -109,7 +112,6 @@ type MJbase struct{
Explain
string
`json:"explain"`
Explain
string
`json:"explain"`
Username
string
`json:"username"`
Username
string
`json:"username"`
Computername
string
`json:"computername"`
Computername
string
`json:"computername"`
Dept
string
`json:"dept"`
Timestamp
int64
`json:"timestamp"`
Timestamp
int64
`json:"timestamp"`
DataBool
bool
`json:"databool"`
DataBool
bool
`json:"databool"`
DataStr
string
`json:"datastr"`
DataStr
string
`json:"datastr"`
...
@@ -134,10 +136,16 @@ type MJbackup struct{
...
@@ -134,10 +136,16 @@ type MJbackup struct{
MJbase
MJbase
Version
string
`json:"version"`
Version
string
`json:"version"`
}
}
// wake Json Format /////////////////////////////////////////////////////
type
MJwake
struct
{
MJbase
MACAddress
string
}
// error Json Format /////////////////////////////////////////////////////
// error Json Format /////////////////////////////////////////////////////
type
MJerror
struct
{
type
MJerror
struct
{
MJbase
MJbase
}
}
// wxwork Json Format /////////////////////////////////////////////////////
type
MJwxwork
struct
{
type
MJwxwork
struct
{
Instruction
string
Instruction
string
UserID
string
UserID
string
...
@@ -214,7 +222,6 @@ func GJexecDIYFlag(flag,command string) MJexec{
...
@@ -214,7 +222,6 @@ func GJexecDIYFlag(flag,command string) MJexec{
}
}
func
(
exec
*
MJexec
)
Init
(
s
string
){
func
(
exec
*
MJexec
)
Init
(
s
string
){
exec
.
Dept
=
User_dept
exec
.
Username
=
User_name
exec
.
Username
=
User_name
exec
.
Computername
=
User_computername
exec
.
Computername
=
User_computername
exec
.
Timestamp
=
NowTimestamp
()
exec
.
Timestamp
=
NowTimestamp
()
...
@@ -230,7 +237,6 @@ func (exec * MJexec)PsExec(){
...
@@ -230,7 +237,6 @@ func (exec * MJexec)PsExec(){
// Backup
// Backup
func
GJbackup
()
interface
{}{
func
GJbackup
()
interface
{}{
...
@@ -247,6 +253,20 @@ func (bak * MJbackup)init() {
...
@@ -247,6 +253,20 @@ func (bak * MJbackup)init() {
// wake
func
GJwake
(
host
,
mac
string
)
interface
{}
{
var
wake
MJwake
wake
.
MsgType
=
Msg_Wake
wake
.
Instruction
=
Msg_Wake_Status_Req
wake
.
Computername
=
host
wake
.
MACAddress
=
mac
return
wake
}
// error
// error
func
GJerror
(
e
error
)
interface
{}{
func
GJerror
(
e
error
)
interface
{}{
...
@@ -256,7 +276,6 @@ func GJerror(e error)interface{}{
...
@@ -256,7 +276,6 @@ func GJerror(e error)interface{}{
}
}
func
(
err
*
MJerror
)
init
(
e
error
){
func
(
err
*
MJerror
)
init
(
e
error
){
err
.
Username
=
User_name
err
.
Username
=
User_name
err
.
Dept
=
User_dept
err
.
Timestamp
=
NowTimestamp
()
err
.
Timestamp
=
NowTimestamp
()
err
.
Computername
=
User_computername
err
.
Computername
=
User_computername
err
.
MsgType
=
Msg_Error
err
.
MsgType
=
Msg_Error
...
@@ -264,6 +283,7 @@ func (err * MJerror)init (e error){
...
@@ -264,6 +283,7 @@ func (err * MJerror)init (e error){
}
}
// wxwork
// wxwork
func
(
wxwork
*
MJwxwork
)
SendText
(
text
string
)
{
func
(
wxwork
*
MJwxwork
)
SendText
(
text
string
)
{
...
...
public/print.go
View file @
8f00eec0
...
@@ -72,6 +72,10 @@ func PntWol(v ...interface{}){
...
@@ -72,6 +72,10 @@ func PntWol(v ...interface{}){
Loger
.
SetPrefix
(
"WOL "
)
Loger
.
SetPrefix
(
"WOL "
)
Loger
.
Println
(
v
...
)
Loger
.
Println
(
v
...
)
}
}
func
PntWolRemote
(
v
...
interface
{}){
Loger
.
SetPrefix
(
"WOLREMOTE "
)
Loger
.
Println
(
v
...
)
}
func
PntSend
(
v
...
interface
{}){
func
PntSend
(
v
...
interface
{}){
Loger
.
SetPrefix
(
"Send "
)
Loger
.
SetPrefix
(
"Send "
)
Loger
.
Println
(
v
...
)
Loger
.
Println
(
v
...
)
...
...
public/public.go
View file @
8f00eec0
...
@@ -23,11 +23,10 @@ func ParseJson(unmsg []byte,v interface{}){
...
@@ -23,11 +23,10 @@ func ParseJson(unmsg []byte,v interface{}){
}
}
// Json 转 Byte
// Json 转 Byte
func
ReParseJson
(
v
*
interface
{})
[]
byte
{
func
ReParseJson
(
v
*
interface
{})
[]
byte
{
textbyte
,
err
:=
json
.
Marshal
(
*
v
)
textbyte
,
err
:=
json
.
Marshal
(
*
v
)
if
err
!=
nil
{
if
err
!=
nil
{
PntError
(
"Json to byte Error "
,
v
,
err
)
PntError
(
"Json to byte Error "
,
v
,
err
)
}
}
return
textbyte
return
textbyte
}
}
...
...
public/send.go
View file @
8f00eec0
...
@@ -10,27 +10,31 @@ import (
...
@@ -10,27 +10,31 @@ import (
func
SendServerReport
(
s
string
)
{
func
SendServerReport
(
s
string
)
{
SendMsg
(
Msg_Report
,
GJreport
(
s
))
Send
AD
Msg
(
Msg_Report
,
GJreport
(
s
))
}
}
func
SendServerExec
(
s
string
)
{
func
SendServerExec
(
v
interface
{})
{
SendMsg
(
Msg_Exec
,
GJexec
(
s
))
SendADMsg
(
Msg_Exec
,
v
)
}
func
SendServerExecJ
(
v
interface
{})
{
SendMsg
(
Msg_Exec
,
v
)
}
}
func
SendServerError
(
err
error
)
{
func
SendServerError
(
err
error
)
{
SendMsg
(
Msg_Error
,
GJerror
(
err
))
Send
AD
Msg
(
Msg_Error
,
GJerror
(
err
))
}
}
// base
// base server msg
func
SendMsg
(
msgtype
string
,
v
interface
{})
{
func
SendADMsg
(
msgtype
string
,
v
interface
{}){
SendMsg
(
ADServerDaemon
,
msgtype
,
v
)
}
func
SendTHMsg
(
msgtype
string
,
v
interface
{}){
SendMsg
(
THServerDaemon
,
msgtype
,
v
)
}
// base msg
func
SendMsg
(
server
,
msgtype
string
,
v
interface
{})
{
//将结构体 转化成 byte
//将结构体 转化成 byte
textbyte
,
err
:=
json
.
Marshal
(
v
)
textbyte
,
err
:=
json
.
Marshal
(
v
)
if
err
!=
nil
{
if
err
!=
nil
{
PntError
(
"Json to String Error "
,
v
,
err
)
PntError
(
"Json to String Error "
,
v
,
err
)
}
}
link
:=
fmt
.
Sprintf
(
"http://%s/%s"
,
ADServerDaemon
,
msgtype
)
link
:=
fmt
.
Sprintf
(
"http://%s/%s"
,
server
,
msgtype
)
PntSend
(
link
,
string
(
textbyte
))
PntSend
(
link
,
string
(
textbyte
))
//发送数据
//发送数据
...
...
public/user.go
View file @
8f00eec0
...
@@ -78,3 +78,16 @@ func Adserver() bool{
...
@@ -78,3 +78,16 @@ func Adserver() bool{
if
Host_adserver
==
User_computername
{
return
true
}
if
Host_adserver
==
User_computername
{
return
true
}
return
false
return
false
}
}
func
BeSecNetwork
(
hostname
*
string
)
bool
{
//自动转大写
*
hostname
=
strings
.
ToUpper
(
*
hostname
)
//京东和HB组报告研究中心组,是第二个网络
if
strings
.
HasPrefix
(
*
hostname
,
"HB"
)
||
strings
.
HasPrefix
(
*
hostname
,
"JD"
)
||
strings
.
HasPrefix
(
*
hostname
,
"BGYJZX"
){
return
true
}
return
false
}
\ No newline at end of file
public/win.go
View file @
8f00eec0
...
@@ -179,6 +179,9 @@ func PSTest_Connection(host string) (bool,error) {
...
@@ -179,6 +179,9 @@ func PSTest_Connection(host string) (bool,error) {
return
false
,
nil
return
false
,
nil
}
}
}
}
//
//
//
//
// local
// local
...
@@ -196,6 +199,7 @@ func OpenWindow(s string){
...
@@ -196,6 +199,7 @@ func OpenWindow(s string){
}
}
//
//
//
//
// remote exec
// remote exec
...
@@ -223,6 +227,9 @@ func Pskill(pc ,cmd string) {
...
@@ -223,6 +227,9 @@ func Pskill(pc ,cmd string) {
Execcmd_nowait
(
psExecCommand
)
Execcmd_nowait
(
psExecCommand
)
}
}
//
//
//
//
// msg show
// msg show
...
@@ -280,6 +287,18 @@ func Reg_query_item_one(root int ,path string) string {
...
@@ -280,6 +287,18 @@ func Reg_query_item_one(root int ,path string) string {
return
""
return
""
}
}
}
}
func
Reg_query_list
(
root
int
,
path
string
)
([]
string
,
error
)
{
if
k
,
kerr
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
READ
);
kerr
==
nil
{
defer
k
.
Close
()
if
sk
,
err
:=
k
.
ReadSubKeyNames
(
0
);
err
==
nil
{
return
sk
,
nil
}
else
{
return
nil
,
Error_Null_Reg_Query
}
}
else
{
return
nil
,
Error_Null_Reg_Query
}
}
func
Reg_IfExist_item
(
root
int
,
path
string
)
error
{
func
Reg_IfExist_item
(
root
int
,
path
string
)
error
{
k
,
err
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
READ
)
k
,
err
:=
registry
.
OpenKey
(
reg_prase
(
&
root
),
path
,
registry
.
READ
)
defer
k
.
Close
()
defer
k
.
Close
()
...
...
public/wol.go
View file @
8f00eec0
...
@@ -15,9 +15,23 @@ import (
...
@@ -15,9 +15,23 @@ import (
// 网络唤醒魔包技术白皮书地址
// 网络唤醒魔包技术白皮书地址
// https://www.amd.com/system/files/TechDocs/20213.pdf
// https://www.amd.com/system/files/TechDocs/20213.pdf
func
Wol
(
mac
string
)
error
{
//nic := ""
func
Wol_enter
(
pc
string
,
mac
*
string
){
// 如果是704,且只有主控进行唤醒操作
if
BeSecNetwork
(
&
pc
)
&&
Adserver
(){
SendTHMsg
(
Msg_Wake
,
GJwake
(
pc
,
*
mac
))
// 否则本地直接唤醒(用于辅控在其他的网络唤醒)
// 如果测试其他网络的滑行情况,需要注释else代码块
}
else
{
PntWol
(
pc
,
*
mac
)
if
err
:=
wol
(
*
mac
);
err
!=
nil
{
PntError
(
err
)
}
}
}
func
wol
(
mac
string
)
error
{
hw
:=
strings
.
Replace
(
strings
.
Replace
(
mac
,
":"
,
""
,
-
1
),
"-"
,
""
,
-
1
)
hw
:=
strings
.
Replace
(
strings
.
Replace
(
mac
,
":"
,
""
,
-
1
),
"-"
,
""
,
-
1
)
if
len
(
hw
)
!=
12
{
if
len
(
hw
)
!=
12
{
...
...
users/menu.go
View file @
8f00eec0
...
@@ -3,7 +3,7 @@ import (
...
@@ -3,7 +3,7 @@ import (
"github.com/lxn/walk"
"github.com/lxn/walk"
.
"github.com/lxn/walk/declarative"
.
"github.com/lxn/walk/declarative"
"strings"
"strings"
pub
"AD-Control/public"
pub
"AD-Control
-Golang
/public"
)
)
const
(
const
(
...
@@ -124,7 +124,7 @@ func menuInitSoftwareInstall(ni * walk.NotifyIcon){
...
@@ -124,7 +124,7 @@ func menuInitSoftwareInstall(ni * walk.NotifyIcon){
func
siEnter_admin
(
softname
string
){
func
siEnter_admin
(
softname
string
){
go
pub
.
Msg
(
"等待弹出安装窗口,请稍等。。"
)
go
pub
.
Msg
(
"等待弹出安装窗口,请稍等。。"
)
ifFile
:=
pub
.
Exist
(
`C:\windows\`
+
softname
)
ifFile
:=
pub
.
Exist
(
`C:\windows\`
+
softname
)
pub
.
SendServerExec
J
(
pub
.
GJexecInstallSoftware
(
ifFile
,
softname
))
pub
.
SendServerExec
(
pub
.
GJexecInstallSoftware
(
ifFile
,
softname
))
}
}
...
@@ -138,7 +138,7 @@ func siEnter_admin(softname string){
...
@@ -138,7 +138,7 @@ func siEnter_admin(softname string){
func
menuInitTools
(
ni
*
walk
.
NotifyIcon
){
func
menuInitTools
(
ni
*
walk
.
NotifyIcon
){
fa
:=
"工具集合"
fa
:=
"工具集合"
sub
:=
[
...
]
string
{
"Excel关键词分割"
,
"备份用户文件"
,
"优雅批量打开网页"
,
"隐藏/显示桌面图标"
,
"更新手机代理程序"
,
"PDF转换"
}
sub
:=
[
...
]
string
{
"Excel关键词分割"
,
"备份用户文件"
,
"优雅批量打开网页"
,
"隐藏/显示桌面图标"
,
"更新手机代理程序"
,
"PDF转换"
,
"窗口拦截"
}
// 建立空菜单
// 建立空菜单
nm
,
err
:=
walk
.
NewMenu
()
nm
,
err
:=
walk
.
NewMenu
()
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -173,6 +173,8 @@ func menuInitTools(ni * walk.NotifyIcon){
...
@@ -173,6 +173,8 @@ func menuInitTools(ni * walk.NotifyIcon){
na
.
Triggered
()
.
Attach
(
tUpdateATool
)
na
.
Triggered
()
.
Attach
(
tUpdateATool
)
case
5
:
case
5
:
na
.
Triggered
()
.
Attach
(
tPdfTrans
)
na
.
Triggered
()
.
Attach
(
tPdfTrans
)
case
6
:
na
.
Triggered
()
.
Attach
(
tWindowsBlock
)
}
}
// 将 子按钮 添加到 菜单
// 将 子按钮 添加到 菜单
...
@@ -260,7 +262,7 @@ func tBakcupUser(){
...
@@ -260,7 +262,7 @@ func tBakcupUser(){
pub
.
SendServerReport
(
pub
.
Msg_Report_InitBak
)
pub
.
SendServerReport
(
pub
.
Msg_Report_InitBak
)
}
}
}
}
// 其他工具
备份用户文件
// 其他工具
Pdf转换
func
tPdfTrans
(){
func
tPdfTrans
(){
AcrobatDC
:=
`C:\Application\AcrobatDC\AcrobatDCPortable.exe`
AcrobatDC
:=
`C:\Application\AcrobatDC\AcrobatDCPortable.exe`
if
pub
.
NotExist
(
AcrobatDC
){
if
pub
.
NotExist
(
AcrobatDC
){
...
@@ -268,7 +270,7 @@ func tPdfTrans(){
...
@@ -268,7 +270,7 @@ func tPdfTrans(){
return
return
}
}
go
pub
.
Msg
(
`Acrobat DC正在打开`
)
go
pub
.
Msg
(
`Acrobat DC正在打开`
)
pub
.
SendServerExec
J
(
pub
.
GJexecDIYFlag
(
pub
.
Msg_Exec_OpenAdminEXE
,
AcrobatDC
))
pub
.
SendServerExec
(
pub
.
GJexecDIYFlag
(
pub
.
Msg_Exec_OpenAdminEXE
,
AcrobatDC
))
return
return
}
}
...
@@ -306,7 +308,17 @@ func tHideShowIcon(){
...
@@ -306,7 +308,17 @@ func tHideShowIcon(){
}
}
}
}
// 其他工具 火绒窗口拦截工具
func
tWindowsBlock
(){
PopBlock
:=
`C:\Progra~2\zhiwei\huorong_windows_block\PopBlock.exe`
if
pub
.
NotExist
(
PopBlock
){
go
pub
.
Msg
(
`火绒窗口拦截工具没有安装,请先从小工具中"软件安装"中进行安装`
)
return
}
pub
.
SendServerExec
(
pub
.
GJexecDIYFlag
(
pub
.
Msg_Exec_OpenAdminEXE
,
PopBlock
))
return
}
//---------------------------------------------------------------
//---------------------------------------------------------------
//
//
// File share
// File share
...
@@ -317,7 +329,7 @@ func tHideShowIcon(){
...
@@ -317,7 +329,7 @@ func tHideShowIcon(){
func
menuInitFileShares
(
ni
*
walk
.
NotifyIcon
){
func
menuInitFileShares
(
ni
*
walk
.
NotifyIcon
){
fa
:=
"文件共享"
fa
:=
"文件共享"
//
//
建立空菜单
// 建立空菜单
mfs
,
err
:=
walk
.
NewMenu
()
mfs
,
err
:=
walk
.
NewMenu
()
if
err
!=
nil
{
if
err
!=
nil
{
pub
.
PntError
(
err
)
pub
.
PntError
(
err
)
...
@@ -337,7 +349,7 @@ func menuInitFileShares(ni * walk.NotifyIcon){
...
@@ -337,7 +349,7 @@ func menuInitFileShares(ni * walk.NotifyIcon){
}
}
deptshare
:=
memberList
.
Name
()
deptshare
:=
memberList
.
Name
()
// 不在 其他共享 里 显示自己部门的共享
// 不在 其他共享 里 显示自己部门的共享
if
deptshare
==
pub
.
User_dept
_desplay
{
if
deptshare
==
pub
.
User_dept
{
continue
continue
}
}
if
deptshare
==
"DfsrPrivate"
{
if
deptshare
==
"DfsrPrivate"
{
...
@@ -483,7 +495,7 @@ func (mw *MyMainWindow) tHideShowIconDeal() {
...
@@ -483,7 +495,7 @@ func (mw *MyMainWindow) tHideShowIconDeal() {
exec
.
Explain
=
"显示"
exec
.
Explain
=
"显示"
exec
.
DataBool
=
true
exec
.
DataBool
=
true
}
}
pub
.
SendServerExec
J
(
exec
)
pub
.
SendServerExec
(
exec
)
}
}
...
...
users/users.go
View file @
8f00eec0
...
@@ -14,9 +14,6 @@ import (
...
@@ -14,9 +14,6 @@ import (
pub
"AD-Control-Golang/public"
pub
"AD-Control-Golang/public"
)
)
var
baseDay
,
baseHour
=
pub
.
GetDateHour
()
var
baseX
,
baseY
=
GetMousePos
()
func
GetMousePos
()
(
int
,
int
)
{
func
GetMousePos
()
(
int
,
int
)
{
C
.
getMouse
()
C
.
getMouse
()
x
:=
int
(
C
.
point
.
x
)
x
:=
int
(
C
.
point
.
x
)
...
@@ -56,6 +53,9 @@ func menuInit(ni * walk.NotifyIcon){
...
@@ -56,6 +53,9 @@ func menuInit(ni * walk.NotifyIcon){
func
isActive
(){
func
isActive
(){
for
{
for
{
d
,
h
:=
pub
.
GetDateHour
()
d
,
h
:=
pub
.
GetDateHour
()
ox
,
oy
:=
GetMousePos
()
pub
.
Delay
(
3602
)
// 新的一天
// 新的一天
if
d
==
9
{
if
d
==
9
{
...
@@ -67,12 +67,11 @@ func isActive(){
...
@@ -67,12 +67,11 @@ func isActive(){
x
,
y
:=
GetMousePos
()
x
,
y
:=
GetMousePos
()
// 如果处于闲置状态
// 如果处于闲置状态
if
baseX
==
x
&&
baseY
==
y
&&
pub
.
IsPrimaryUser
(
pub
.
User_name
)
{
if
ox
==
x
&&
oy
==
y
{
pub
.
MsgShutdown
(
"即将关机,如需取消,点击小工具-电源选项-取消关机计时"
)
pub
.
MsgShutdown
(
"即将关机,如需取消,点击小工具-电源选项-取消关机计时"
)
}
}
}
}
pub
.
Delay
(
3602
)
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment