WebSocket-Infrastruktur: bidirektionaler Command-Kanal + TCP-Tunnel

- Agent: WS-Client mit Reconnect, Command-Handler (exec, tunnel_open/close/data)
- Backend: WS-Hub, Tunnel-Manager mit dynamischen Proxy-Ports (10000-20000)
- API: /agents/{id}/exec, /tunnel, /tunnels, /proxy/{tunnel_id}
- Binary WebSocket Messages fuer effiziente Tunnel-Daten
- gorilla/websocket (pure Go, kein CGO)
- README aktualisiert
This commit is contained in:
cynfo3000
2026-02-28 07:42:33 +01:00
parent 6120d0cffa
commit f47154787d
12 changed files with 1211 additions and 198 deletions
+18 -3
View File
@@ -3,9 +3,9 @@ package ws
import (
"context"
"crypto/tls"
"encoding/json"
"fmt"
"log"
"net/http"
"net/url"
"sync"
"time"
@@ -218,12 +218,27 @@ func (c *Client) readMessages(conn *websocket.Conn, msgChan chan<- Message, errC
defer close(msgChan)
for {
var msg Message
if err := conn.ReadJSON(&msg); err != nil {
messageType, data, err := conn.ReadMessage()
if err != nil {
errChan <- err
return
}
if messageType == websocket.BinaryMessage {
// Binary-Message für Tunnel-Daten verarbeiten
if err := c.tunnelManager.ProcessBinaryMessage(data); err != nil {
log.Printf("Binary-Message verarbeiten fehlgeschlagen: %v", err)
}
continue
}
// JSON-Message parsen
var msg Message
if err := json.Unmarshal(data, &msg); err != nil {
log.Printf("JSON-Message parsen fehlgeschlagen: %v", err)
continue
}
select {
case msgChan <- msg:
case <-c.ctx.Done():
-1
View File
@@ -6,7 +6,6 @@ import (
"log"
"os/exec"
"strconv"
"strings"
"time"
)