aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/nDPIsrvd.py62
-rwxr-xr-xexamples/py-flow-info/flow-info.py16
-rwxr-xr-xexamples/py-flow-undetected-to-pcap/flow-undetected-to-pcap.py16
-rwxr-xr-xexamples/py-risky-flow-to-pcap/risky-flow-to-pcap.py16
4 files changed, 69 insertions, 41 deletions
diff --git a/contrib/nDPIsrvd.py b/contrib/nDPIsrvd.py
index 4b4e355dd..faba82a1d 100644
--- a/contrib/nDPIsrvd.py
+++ b/contrib/nDPIsrvd.py
@@ -1,18 +1,24 @@
#!/usr/bin/env python3
+import argparse
import json
import re
+import os
import scapy.all
+import stat
import socket
DEFAULT_HOST = '127.0.0.1'
DEFAULT_PORT = 7000
+DEFAULT_UNIX = '/tmp/ndpid-distributor.sock'
+
NETWORK_BUFFER_MIN_SIZE = 5
NETWORK_BUFFER_MAX_SIZE = 9216 # Please keep this value in sync with the one in config.h
PKT_TYPE_ETH_IP4 = 0x0800
PKT_TYPE_ETH_IP6 = 0x86DD
+EVENT_UNKNOWN = 'Unknown'
DAEMON_EVENTS = ['Invalid', 'Init', 'Reconnect', 'Shutdown']
BASIC_EVENTS = ['Invalid', 'Unknown-Datalink-Layer', 'Unknown-Layer3-Protocol', 'Non-IP-Packet',
'Ethernet-Packet-Too-Short', 'Ethernet-Packet-Unknown', 'IP4-Packet-Too-Short',
@@ -32,11 +38,19 @@ class TermColor:
BLINK = "\x1b[5m"
class nDPIsrvdSocket:
- def __init__(self, sock=None):
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ def __init__(self):
+ self.sock_family = None
+
+ def connect(self, addr):
+ if type(addr) is tuple:
+ self.sock_family = socket.AF_INET
+ elif type(addr) is str:
+ self.sock_family = socket.AF_UNIX
+ else:
+ raise RuntimeError('Unsupported address type:: {}'.format(str(addr)))
- def connect(self, host, port):
- self.sock.connect((host, port))
+ self.sock = socket.socket(self.sock_family, socket.SOCK_STREAM)
+ self.sock.connect(addr)
self.buffer = bytes()
self.msglen = 0
self.digitlen = 0
@@ -143,13 +157,13 @@ def JsonParseBytes(json_bytes):
class nDPIdEvent:
isValid = False
DaemonEventID = -1
- DaemonEventName = 'Unknown'
+ DaemonEventName = EVENT_UNKNOWN
BasicEventID = -1
- BasicEventName = 'Unknown'
+ BasicEventName = EVENT_UNKNOWN
PacketEventID = -1
- PacketEventName = 'Unknown'
+ PacketEventName = EVENT_UNKNOWN
FlowEventID = -1
- FlowEventName = 'Unknown'
+ FlowEventName = EVENT_UNKNOWN
def validateFlowEventID(event_id):
if type(event_id) is not int:
@@ -219,3 +233,35 @@ def validateJsonEventTypes(json_dict):
nev.isValid = True
return nev
+
+def defaultArgumentParser():
+ parser = argparse.ArgumentParser(description='nDPIsrvd options', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ parser.add_argument('--host', type=str, help='nDPIsrvd host IP')
+ parser.add_argument('--port', type=int, default=DEFAULT_PORT, help='nDPIsrvd TCP port')
+ parser.add_argument('--unix', type=str, help='nDPIsrvd unix socket path')
+ return parser
+
+def validateAddress(args):
+ address = None
+
+ if args.host is None:
+ address_tcpip = (DEFAULT_HOST, DEFAULT_PORT)
+ else:
+ address_tcpip = (args.host, args.port)
+
+ if args.unix is None:
+ address_unix = DEFAULT_UNIX
+ else:
+ address_unix = args.unix
+
+ possible_sock_mode = 0
+ try:
+ possible_sock_mode = os.stat(address_unix).st_mode
+ except:
+ pass
+ if stat.S_ISSOCK(possible_sock_mode):
+ address = address_unix
+ else:
+ address = address_tcpip
+
+ return address
diff --git a/examples/py-flow-info/flow-info.py b/examples/py-flow-info/flow-info.py
index ff513023e..ca3249a3e 100755
--- a/examples/py-flow-info/flow-info.py
+++ b/examples/py-flow-info/flow-info.py
@@ -61,21 +61,15 @@ def parse_json_str(json_str):
if __name__ == '__main__':
- host = nDPIsrvd.DEFAULT_HOST
- port = nDPIsrvd.DEFAULT_PORT
-
- if len(sys.argv) == 1:
- sys.stderr.write('usage: {} [host] [port]\n'.format(sys.argv[0]))
- if len(sys.argv) > 1:
- host = sys.argv[1]
- if len(sys.argv) > 2:
- port = int(sys.argv[2])
+ argparser = nDPIsrvd.defaultArgumentParser()
+ args = argparser.parse_args()
+ address = nDPIsrvd.validateAddress(args)
sys.stderr.write('Recv buffer size: {}\n'.format(nDPIsrvd.NETWORK_BUFFER_MAX_SIZE))
- sys.stderr.write('Connecting to {}:{} ..\n'.format(host, port))
+ sys.stderr.write('Connecting to {} ..\n'.format(address[0]+':'+str(address[1]) if type(address) is tuple else address))
nsock = nDPIsrvdSocket()
- nsock.connect(host, port)
+ nsock.connect(address)
while True:
received = nsock.receive()
diff --git a/examples/py-flow-undetected-to-pcap/flow-undetected-to-pcap.py b/examples/py-flow-undetected-to-pcap/flow-undetected-to-pcap.py
index 26eac3ff5..fc0737288 100755
--- a/examples/py-flow-undetected-to-pcap/flow-undetected-to-pcap.py
+++ b/examples/py-flow-undetected-to-pcap/flow-undetected-to-pcap.py
@@ -60,21 +60,15 @@ def parse_json_str(json_str):
if __name__ == '__main__':
- host = nDPIsrvd.DEFAULT_HOST
- port = nDPIsrvd.DEFAULT_PORT
-
- if len(sys.argv) == 1:
- sys.stderr.write('usage: {} [host] [port]\n'.format(sys.argv[0]))
- if len(sys.argv) > 1:
- host = sys.argv[1]
- if len(sys.argv) > 2:
- port = int(sys.argv[2])
+ argparser = nDPIsrvd.defaultArgumentParser()
+ args = argparser.parse_args()
+ address = nDPIsrvd.validateAddress(args)
sys.stderr.write('Recv buffer size: {}\n'.format(nDPIsrvd.NETWORK_BUFFER_MAX_SIZE))
- sys.stderr.write('Connecting to {}:{} ..\n'.format(host, port))
+ sys.stderr.write('Connecting to {} ..\n'.format(address[0]+':'+str(address[1]) if type(address) is tuple else address))
nsock = nDPIsrvdSocket()
- nsock.connect(host, port)
+ nsock.connect(address)
while True:
received = nsock.receive()
diff --git a/examples/py-risky-flow-to-pcap/risky-flow-to-pcap.py b/examples/py-risky-flow-to-pcap/risky-flow-to-pcap.py
index f3348e9a1..a57c37496 100755
--- a/examples/py-risky-flow-to-pcap/risky-flow-to-pcap.py
+++ b/examples/py-risky-flow-to-pcap/risky-flow-to-pcap.py
@@ -56,21 +56,15 @@ def parse_json_str(json_str):
if __name__ == '__main__':
- host = nDPIsrvd.DEFAULT_HOST
- port = nDPIsrvd.DEFAULT_PORT
-
- if len(sys.argv) == 1:
- sys.stderr.write('usage: {} [host] [port]\n'.format(sys.argv[0]))
- if len(sys.argv) > 1:
- host = sys.argv[1]
- if len(sys.argv) > 2:
- port = int(sys.argv[2])
+ argparser = nDPIsrvd.defaultArgumentParser()
+ args = argparser.parse_args()
+ address = nDPIsrvd.validateAddress(args)
sys.stderr.write('Recv buffer size: {}\n'.format(nDPIsrvd.NETWORK_BUFFER_MAX_SIZE))
- sys.stderr.write('Connecting to {}:{} ..\n'.format(host, port))
+ sys.stderr.write('Connecting to {} ..\n'.format(address[0]+':'+str(address[1]) if type(address) is tuple else address))
nsock = nDPIsrvdSocket()
- nsock.connect(host, port)
+ nsock.connect(address)
while True:
received = nsock.receive()