tpotce/docker/glutton/dist/tcp.go

45 lines
1.1 KiB
Go
Raw Normal View History

2018-08-30 16:19:11 +00:00
package glutton
import (
"context"
"encoding/hex"
"fmt"
"net"
"strconv"
"github.com/kung-foo/freki"
"go.uber.org/zap"
)
// HandleTCP takes a net.Conn and peeks at the data send
func (g *Glutton) HandleTCP(ctx context.Context, conn net.Conn) (err error) {
defer func() {
err = conn.Close()
if err != nil {
g.logger.Error(fmt.Sprintf("[log.tcp ] error: %v", err))
}
}()
host, port, err := net.SplitHostPort(conn.RemoteAddr().String())
if err != nil {
g.logger.Error(fmt.Sprintf("[log.tcp ] error: %v", err))
}
ck := freki.NewConnKeyByString(host, port)
md := g.processor.Connections.GetByFlow(ck)
buffer := make([]byte, 1024)
n, err := conn.Read(buffer)
if err != nil {
g.logger.Error(fmt.Sprintf("[log.tcp ] error: %v", err))
}
if n > 0 && n < 1024 {
g.logger.Info(
fmt.Sprintf("Packet got handled by TCP handler"),
zap.String("dest_port", strconv.Itoa(int(md.TargetPort))),
zap.String("src_ip", host),
zap.String("src_port", port),
zap.String("handler", "tcp"),
zap.String("payload_hex", hex.EncodeToString(buffer[0:n])),
)
}
return err
}