Files
honeydany/app/services/generic.go
T

42 lines
1.3 KiB
Go

package services
import (
"bufio"
"fmt"
"net"
"strconv"
"strings"
"time"
)
func NewGenericEchoHandler(log LoggerFunc) Handler {
return func(c net.Conn) {
defer c.Close()
remote := c.RemoteAddr().String()
c.SetDeadline(time.Now().Add(10 * time.Second))
_, _ = c.Write([]byte("220 Welcome to service\r\n"))
r := bufio.NewReader(c)
var b strings.Builder
for i := 0; i < 10; i++ {
line, err := r.ReadString('\n')
if err != nil { break }
b.WriteString(line)
_, _ = c.Write([]byte("ACK\r\n"))
}
log(Record{Timestamp: Now(), RemoteAddr: remoteIP(remote), RemotePort: remotePort(remote), Service: "generic", Details: map[string]string{"lines": strconv.Itoa(strings.Count(b.String(), "\n"))}, RawPayload: b.String()})
}
}
func NewGenericBannerHandler(banner string, log LoggerFunc) Handler {
return func(c net.Conn) {
defer c.Close()
remote := c.RemoteAddr().String()
_, _ = c.Write([]byte(fmt.Sprintf("%s\r\n", banner)))
c.SetDeadline(time.Now().Add(10 * time.Second))
buf := make([]byte, 4096)
n, _ := c.Read(buf)
payload := strings.TrimSpace(string(buf[:n]))
log(Record{Timestamp: Now(), RemoteAddr: remoteIP(remote), RemotePort: remotePort(remote), Service: banner, Details: map[string]string{"read_bytes": strconv.Itoa(n)}, RawPayload: payload})
}
}