aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2019-03-24 21:45:18 +0200
committerMarin Ivanov <[email protected]>2019-03-24 21:45:18 +0200
commit6ab1613157a6a5d3eabf9d2fe2adf4699d29a5ba (patch)
tree37d916734789e97096a78d907fd0046dfa349e82 /main.go
parent317163b27c1b16687a1473b6b40e743a83964f6a (diff)
Make TCP connection tarpit
This first version of the command has support for SSH protocol tarpit.
Diffstat (limited to 'main.go')
-rw-r--r--main.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..8de0a5c
--- /dev/null
+++ b/main.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+ "fmt"
+ "math/rand"
+ "net"
+ "os"
+ "time"
+
+ flag "github.com/spf13/pflag"
+)
+
+func main() {
+ var protocol string
+ var bindAddr string
+ var port int
+
+ flag.StringVarP(&protocol, "proto", "P", "ssh", "protocol to trap")
+ flag.StringVarP(&bindAddr, "bind-address", "b", "", "address to bind the socket to")
+ flag.IntVarP(&port, "port", "p", 22, "TCP port")
+ flag.Parse()
+
+ handler, err := protocolHandler(protocol)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "Error: protocol handler;", err.Error())
+ os.Exit(1)
+ }
+
+ rand.Seed(time.Now().UnixNano())
+ bind := fmt.Sprintf("%s:%d", bindAddr, port)
+ ln, err := net.Listen("tcp", bind)
+ if err != nil {
+ fmt.Fprintln(os.Stderr, "Error: server listen;", err.Error())
+ os.Exit(1)
+ }
+ fmt.Fprintf(os.Stderr, "** Server listening on %s\n", bind)
+ for {
+ conn, err := ln.Accept()
+ if err != nil {
+ // handle error
+ continue
+ }
+ go connHandler(handler, conn)
+ }
+}