Bladeren bron

Server initial

Min 6 jaren geleden
bovenliggende
commit
341703bd14
3 gewijzigde bestanden met toevoegingen van 92 en 0 verwijderingen
  1. 5 0
      server/main.go
  2. 53 0
      server/server.go
  3. 34 0
      server/utils.go

+ 5 - 0
server/main.go

@@ -0,0 +1,5 @@
+package main
+
+func main() {
+	serve(":9000")
+}

+ 53 - 0
server/server.go

@@ -0,0 +1,53 @@
+package main
+
+import (
+	"crypto/aes"
+	"crypto/cipher"
+	"encoding/binary"
+	"encoding/hex"
+	"fmt"
+	"net"
+)
+
+var aes_key = "03020100070605040b0a09080f0e0d0c"
+
+func serveConnection(conn net.Conn) {
+	defer logPanic()
+	defer conn.Close()
+	fmt.Printf("Connection from %s\n", conn.RemoteAddr().String())
+	decoded, _ := hex.DecodeString(aes_key)
+	buf := make([]byte, 4)
+	for {
+		_, err := conn.Read(buf)
+		errCheckPanic(err, "Connection failed with %s", conn.RemoteAddr().String())
+		id := binary.LittleEndian.Uint16(buf[:2])
+		msglen := binary.LittleEndian.Uint16(buf[2:])
+		fmt.Printf("Connection from ID %d message length %d\n %x\n", id, msglen, buf)
+		payload := make([]byte, msglen)
+		_, err = conn.Read(payload)
+		errCheckPanic(err, "Connection failed %s device #%d", conn.RemoteAddr().String(), id)
+		fmt.Printf("Payload: %x\n", payload)
+		message := make([]byte, msglen-16)
+		c, err := aes.NewCipher(decoded)
+		errCheckPanic(err, "Decryption failed %s device #%d", conn.RemoteAddr().String(), id)
+		cbc := cipher.NewCBCEncrypter(c, payload[:16])
+		cbc.CryptBlocks(payload[16:], message)
+		fmt.Printf("Message: %x\n", message)
+	}
+
+}
+
+func serve(address string) {
+	ln, err := net.Listen("tcp", address)
+	errCheckExit(err,"Failed accept connection")
+
+	defer ln.Close()
+	fmt.Printf("Service socket ready at %s\n", address)
+
+	for {
+		conn, err := ln.Accept()
+		errCheckExit(err,"Failed accept connection %s", conn.RemoteAddr().String())
+		go serveConnection(conn)
+	}
+
+}

+ 34 - 0
server/utils.go

@@ -0,0 +1,34 @@
+package main
+
+import (
+	"fmt"
+	"os"
+)
+
+func errCheck(err error, msg string, opts ...interface{}) {
+	if err != nil {
+		fmt.Errorf(msg + "\n", opts...)
+		fmt.Errorf(err.Error())
+	}
+}
+
+func errCheckExit(err error, msg string, opts ...interface{}) {
+	if err != nil {
+		fmt.Errorf(msg + "\n", opts...)
+		fmt.Errorf(err.Error())
+		os.Exit(1)
+	}
+}
+
+func errCheckPanic(err error, msg string, opts ...interface{}) {
+	if err != nil {
+		panic(fmt.Sprintf(msg + "\n", opts...) + err.Error())
+	}
+}
+
+
+func logPanic() {
+	if r := recover(); r!= nil {
+		fmt.Errorf("%s\n", r)
+	}
+}