go 远程开关机
go 远程开关机的代码,因为刚接触go,时间又赶,没做优化,在此记录一下,免得过后忘了。
package main
import (
"flag"
"fmt"
"log"
"net"
"os/exec"
"reflect"
)
var (
arg string
)
func init() {
flag.StringVar(&arg, "uFlags", "", "shutdown")
}
func main() {
Startup()
ShutDownEXE()
/*
flag.Parse()
switch arg {
case "shutdown":
ReShutDownEXE()
default:
fmt.Println("您输入的参数有误.")
}
*/
}
func ShutDownEXE() {
fmt.Println("远程关闭目标机")
arg := []string{"-m", "\\10.1.16.56", "-s", "-t", "20"}
cmd := exec.Command("shutdown", arg...)
d, err := cmd.CombinedOutput()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(d))
return
}
func Startup() {
addr := "10.1.16.255:20000" //定义主机名
//addr := "255.255.255.255:0" //定义主机名
conn, err := net.Dial("udp", addr) //拨号操作,需要指定协议。
if err != nil {
log.Fatal(err)
}
fmt.Println("访问公网IP地址是:", conn.RemoteAddr().String()) /*获取“conn”中的公网地址。注意:最好是加上后面的String方法,因为他们的那些是不一样的哟·当然你打印的时候可以不加输出结果是一样的,但是你的内心是不一样的哟!*/
fmt.Printf("客户端链接的地址及端口是:%v
", conn.LocalAddr()) //获取到本地的访问地址和端口。
fmt.Println("“conn.LocalAddr()”所对应的数据类型是:", reflect.TypeOf(conn.LocalAddr()))
fmt.Println("“conn.RemoteAddr().String()”所对应的数据类型是:", reflect.TypeOf(conn.RemoteAddr().String()))
head := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
mac := []byte{0xB0, 0x83, 0xFE, 0x8C, 0xAE, 0x03}
data := append([]byte{}, head...)
for i := 0; i < 16; i++ {
data = append(data, mac...)
}
//n, err := conn.Write([]byte("GET / HTTP/1.1
")) //向服务端发送数据。用n接受返回的数据大小,用err接受错误信息。
n, err := conn.Write(data) //向服务端发送数据。用n接受返回的数据大小,用err接受错误信息。
if err != nil {
log.Fatal(err)
}
fmt.Println("向服务端发送的数据大小是:", n)
conn.Close() //断开UDP链接。
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...

