aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2020-08-16 00:44:15 +0200
committerToni Uhlig <matzeton@googlemail.com>2020-08-16 00:44:15 +0200
commit41d0c414cc3cfa654ad10b69ba0c14848ac4ef2e (patch)
tree093d837eb4830195eb06baf0743ccc7fcef8807b
parent99908653629827adb5fd3f0ba3d3069396c8be1c (diff)
added nDPIsrvd communication/utils python module
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
-rw-r--r--contrib/nDPIsrvd.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/contrib/nDPIsrvd.py b/contrib/nDPIsrvd.py
new file mode 100644
index 000000000..060340815
--- /dev/null
+++ b/contrib/nDPIsrvd.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+import re
+import socket
+
+DEFAULT_HOST = '127.0.0.1'
+DEFAULT_PORT = 7000
+NETWORK_BUFFER_MIN_SIZE = 5
+NETWORK_BUFFER_MAX_SIZE = 8448
+
+class TermColor:
+ WARNING = '\033[93m'
+ FAIL = '\033[91m'
+ BOLD = '\033[1m'
+ END = '\033[0m'
+ BLINK = "\x1b[5m"
+
+class nDPIsrvdSocket:
+ def __init__(self, sock=None):
+ self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+ def connect(self, host, port):
+ self.sock.connect((host, port))
+ self.buffer = bytes()
+ self.msglen = 0
+ self.digitlen = 0
+
+ def receive(self):
+ recvd = self.sock.recv(NETWORK_BUFFER_MAX_SIZE - len(self.buffer))
+
+ if len(recvd) == 0:
+ raise RuntimeError('socket connection broken')
+ self.buffer += recvd
+
+ retval = []
+ while self.msglen + self.digitlen < len(self.buffer):
+
+ if self.msglen == 0:
+ starts_with_digits = re.match(r'(^\d+){', self.buffer[:NETWORK_BUFFER_MIN_SIZE].decode(errors='strict'))
+ if starts_with_digits is None:
+ if len(self.buffer) < NETWORK_BUFFER_MIN_SIZE:
+ break
+ raise RuntimeError('Invalid packet received: {}'.format(self.buffer))
+ self.msglen = int(starts_with_digits[1])
+ self.digitlen = len(starts_with_digits[1])
+
+ if len(self.buffer) >= self.msglen + self.digitlen:
+ recvd = self.buffer[self.digitlen:self.msglen + self.digitlen]
+ self.buffer = self.buffer[self.msglen + self.digitlen:]
+ retval += [(recvd,self.msglen,self.digitlen)]
+
+ self.msglen = 0
+ self.digitlen = 0
+
+ return retval