HellPot/hellpot.go

58 lines
1.3 KiB
Go
Raw Normal View History

package main
import (
"HellPot/src/config"
"context"
"io"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
const robotsTxt = "User-agent: *\r\n"
func startPot() {
var paths string
addr := config.BindAddr
port := config.BindPort
// subscribe to SIGINT signals
stopChan := make(chan os.Signal, 1)
signal.Notify(stopChan, syscall.SIGINT, syscall.SIGTERM)
for _, p := range config.Paths {
http.HandleFunc(p, func(w http.ResponseWriter, r *http.Request) {
DefaultHoneypot(w, r)
})
paths = paths + "Disallow: " + p + "\r\n"
}
http.HandleFunc("/robots.txt", func(w http.ResponseWriter, r *http.Request) {
if _, err := io.WriteString(w, robotsTxt+paths+"\r\n"); err != nil {
log.Error().Err(err).Msg("SERVE_ROBOTS_ERROR")
}
})
srv := &http.Server{Addr: addr + ":" + port, Handler: http.DefaultServeMux}
go func() {
log.Info().Str("bind_addr", addr).Str("bind_port", port).
Msg("Listening and serving HTTP...")
// service connections
err := srv.ListenAndServe()
log.Warn().Err(err).Msg("HTTP_STOP")
}()
<-stopChan // wait for SIGINT
log.Warn().Msg("Shutting down server...")
// shut down gracefully, but wait no longer than 5 seconds before halting
ctx, c := context.WithTimeout(context.Background(), 5*time.Second)
defer c()
srv.Shutdown(ctx)
log.Info().Msg("Server gracefully stopped")
}