rportfwd fix

This commit is contained in:
Ralf
2026-01-21 20:55:53 +03:00
parent df98d7a8fa
commit 022b153429
10 changed files with 54 additions and 22 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ type Teamserver interface {
TsAgentTerminate(agentId string, terminateTaskId string) error
TsAgentRemove(agentId string) error
TsAgentConsoleRemove(agentId string) error
TsAgentSetTick(agentId string) error
TsAgentSetTick(agentId string, listenerName string) error
TsAgentTickUpdate()
TsAgentConsoleOutput(agentId string, messageType int, message string, clearText string, store bool)
TsAgentConsoleOutputClient(agentId string, client string, messageType int, message string, clearText string)
+27 -5
View File
@@ -786,7 +786,7 @@ func (ts *Teamserver) TsAgentRemove(agentId string) error {
return nil
}
func (ts *Teamserver) TsAgentSetTick(agentId string) error {
func (ts *Teamserver) TsAgentSetTick(agentId string, listenerName string) error {
value, ok := ts.Agents.Get(agentId)
if !ok {
return fmt.Errorf("agent type %v does not exists", agentId)
@@ -797,12 +797,34 @@ func (ts *Teamserver) TsAgentSetTick(agentId string) error {
}
agentData := agent.GetData()
listenerChanged := listenerName != "" && agentData.Listener != listenerName
if agentData.Async {
agent.UpdateData(func(d *adaptix.AgentData) {
d.LastTick = int(time.Now().Unix())
})
_ = ts.DBMS.DbAgentTick(agent.GetData())
if listenerChanged {
agent.UpdateData(func(d *adaptix.AgentData) {
d.LastTick = int(time.Now().Unix())
d.Listener = listenerName
})
updatedAgentData := agent.GetData()
packet := CreateSpAgentUpdate(updatedAgentData)
ts.TsSyncAllClients(packet)
_ = ts.DBMS.DbAgentUpdate(updatedAgentData)
} else {
agent.UpdateData(func(d *adaptix.AgentData) {
d.LastTick = int(time.Now().Unix())
})
_ = ts.DBMS.DbAgentTick(agent.GetData())
}
agent.Tick = true
} else if listenerChanged {
agent.UpdateData(func(d *adaptix.AgentData) {
d.Listener = listenerName
})
updatedAgentData := agent.GetData()
packet := CreateSpAgentUpdate(updatedAgentData)
ts.TsSyncAllClients(packet)
_ = ts.DBMS.DbAgentUpdate(updatedAgentData)
}
return nil
}
+3 -3
View File
@@ -159,12 +159,12 @@ func (ts *Teamserver) TsTaskGetAvailableAll(agentId string, availableSize int) (
ts.TsSyncAllClients(packet)
}
tunnelTasks, size := ts.extractTunnelTasks(agent, availableSize, size)
tasks = append(tasks, tunnelTasks...)
tunnelData, size := ts.extractTunnelData(agent, availableSize, size)
tasks = append(tasks, tunnelData...)
tunnelTasks, size := ts.extractTunnelTasks(agent, availableSize, size)
tasks = append(tasks, tunnelTasks...)
pivotTasks, _ := ts.extractPivotTasks(agent, availableSize, size)
tasks = append(tasks, pivotTasks...)
+14 -4
View File
@@ -877,7 +877,9 @@ func relaySocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tunCha
}
go func() {
defer finish()
if direct {
defer finish()
}
if tunChannel.pwSrv == nil || tunChannel.conn == nil {
logs.Debug("", "[ERROR relaySocketToTunnel] pwSrv or conn == nil — copy (pwSrv <- conn)")
return
@@ -889,7 +891,9 @@ func relaySocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tunCha
}()
go func() {
defer finish()
if direct {
defer finish()
}
if tunChannel.prTun == nil || tunChannel.conn == nil {
logs.Debug("", "[ERROR relaySocketToTunnel] prTun or conn == nil — copy (conn <- prTun)")
return
@@ -904,6 +908,7 @@ func relaySocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tunCha
if !direct {
go func() {
defer finish()
buf := tm.GetBuffer()
defer tm.PutBuffer(buf)
for {
@@ -944,7 +949,9 @@ func relayWebsocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tun
}
go func() {
defer finish()
if direct {
defer finish()
}
if tunChannel.wsconn == nil || tunChannel.pwSrv == nil {
return
}
@@ -961,7 +968,9 @@ func relayWebsocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tun
}()
go func() {
defer finish()
if direct {
defer finish()
}
if tunChannel.wsconn == nil || tunChannel.prTun == nil {
return
}
@@ -982,6 +991,7 @@ func relayWebsocketToTunnel(tm *TunnelManager, agent *Agent, tunnel *Tunnel, tun
if !direct {
go func() {
defer finish()
buf := tm.GetBuffer()
defer tm.PutBuffer(buf)
for {
@@ -16,7 +16,7 @@ type Teamserver interface {
TsAgentIsExists(agentId string) bool
TsAgentCreate(agentCrc string, agentId string, beat []byte, listenerName string, ExternalIP string, Async bool) (adaptix.AgentData, error)
TsAgentProcessData(agentId string, bodyData []byte) error
TsAgentSetTick(agentId string) error
TsAgentSetTick(agentId string, listenerName string) error
TsAgentGetHostedAll(agentId string, maxDataSize int) ([]byte, error)
}
@@ -287,12 +287,12 @@ func (t *TransportDNS) handleHI(req *dnsRequest, w dns.ResponseWriter) {
externalIP := "" // extractExternalIP(w.RemoteAddr())
_, _ = Ts.TsAgentCreate(agentType, agentId, beat, t.Name, externalIP, true)
}
_ = Ts.TsAgentSetTick(agentId)
_ = Ts.TsAgentSetTick(agentId, t.Name)
}
func (t *TransportDNS) handleHB(req *dnsRequest) (needsReset bool, hasPendingTasks bool) {
if req.sid != "" {
_ = Ts.TsAgentSetTick(req.sid)
_ = Ts.TsAgentSetTick(req.sid, t.Name)
}
// Check if this SID needs reset
@@ -343,7 +343,7 @@ func (t *TransportDNS) handleHB(req *dnsRequest) (needsReset bool, hasPendingTas
func (t *TransportDNS) handleGET(req *dnsRequest, w dns.ResponseWriter) []byte {
if req.sid != "" {
_ = Ts.TsAgentSetTick(req.sid)
_ = Ts.TsAgentSetTick(req.sid, t.Name)
}
decrypted := rc4Crypt(req.data, t.Config.EncryptKey)
@@ -402,7 +402,7 @@ func (t *TransportDNS) handlePUT(req *dnsRequest) putAckInfo {
ack = t.handlePutFragment(req.sid, req.seq, decrypted, ack)
if req.sid != "" {
_ = Ts.TsAgentSetTick(req.sid)
_ = Ts.TsAgentSetTick(req.sid, t.Name)
}
return ack
}
@@ -15,7 +15,7 @@ type Teamserver interface {
TsAgentIsExists(agentId string) bool
TsAgentCreate(agentCrc string, agentId string, beat []byte, listenerName string, ExternalIP string, Async bool) (adaptix.AgentData, error)
TsAgentProcessData(agentId string, bodyData []byte) error
TsAgentSetTick(agentId string) error
TsAgentSetTick(agentId string, listenerName string) error
TsAgentGetHostedAll(agentId string, maxDataSize int) ([]byte, error)
}
@@ -336,7 +336,7 @@ func (t *TransportHTTP) processRequest(ctx *gin.Context) {
}
}
_ = Ts.TsAgentSetTick(agentId)
_ = Ts.TsAgentSetTick(agentId, t.Name)
_ = Ts.TsAgentProcessData(agentId, bodyData)
@@ -14,7 +14,7 @@ import (
type Teamserver interface {
TsAgentIsExists(agentId string) bool
TsAgentCreate(agentCrc string, agentId string, beat []byte, listenerName string, ExternalIP string, Async bool) (adaptix.AgentData, error)
TsAgentSetTick(agentId string) error
TsAgentSetTick(agentId string, listenerName string) error
TsAgentProcessData(agentId string, bodyData []byte) error
TsAgentGetHostedAll(agentId string, maxDataSize int) ([]byte, error)
TsAgentGetHostedTasks(agentId string, maxDataSize int) ([]byte, error)
@@ -305,7 +305,7 @@ func (t *TransportTCP) handleConnection(conn net.Conn, ts Teamserver) {
break
}
_ = Ts.TsAgentSetTick(agentId)
_ = Ts.TsAgentSetTick(agentId, t.Name)
_ = Ts.TsAgentProcessData(agentId, recvData)
} else {