From 0a688f49ebc9d22cbf0ea7b2974eb8e9c5eed3af Mon Sep 17 00:00:00 2001 From: yakamok <38737288+yakamok@users.noreply.github.com> Date: Sun, 1 Jul 2018 02:09:16 +0200 Subject: [PATCH] first messy draft --- vserv.py | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 vserv.py diff --git a/vserv.py b/vserv.py new file mode 100644 index 0000000..22f3faa --- /dev/null +++ b/vserv.py @@ -0,0 +1,101 @@ +#server for collecting views of the network + +import json +import time +import sqlite3 +from sqlite3 import Error +import os +import socket +#ipaddress needs to be installed its not part of the standard lib +import ipaddress +import thread + +SERVER = "" +DB_PATH = "vservdb/" + + +def check_coords(coords): + coord_len = coords.replace(' ', '').replace('[', '').replace(']', '') + digits_found = [x for x in coord_len if x.isdigit()] + + if len(digits_found) == len(coord_len): + crus = True + else: + crus = False + return crus + + +def valid_ipv6_check(ipv6add): + import ipaddress + try: + if ipaddress.IPv6Address(unicode(ipv6add)): + addr = True + except: + addr = False + return addr + + +def isdatabase(db_path): + if not os.path.exists(db_path + "yggindex.db"): + if not os.path.exists(db_path): + os.makedirs(db_path) + try: + conn = sqlite3.connect(db_path + 'yggindex.db') + c = conn.cursor() + c.execute('create table yggindex(ipv6 varchar(45) UNIQUE, coords varchar(50),\ + utimestamp varchar(40))') + conn.commit() + # c.commit() + except Error as e: + print(e) + finally: + conn.close() + else: + print("found database will not create a new one") + + +def insert_new_entry(db_path, ipv6, coords, utimestamp): + try: + conn = sqlite3.connect(db_path + "yggindex.db") + c = conn.cursor() + c.execute('''INSERT OR REPLACE INTO yggindex(ipv6, coords, utimestamp) VALUES(?, ?, ?)''',\ + (ipv6, coords, utimestamp)) + conn.commit() + conn.close() + except Error as e: + print(e) + + +def error_check_insert_into_db(dht, switchpeers): + try: + if "success" == dht.get("status"): + for x,y in dht["response"]["dht"].iteritems(): + if valid_ipv6_check(x) and check_coords(y["coords"]): + insert_new_entry(DB_PATH, x, y["coords"], int(time.time())) + + if "success" == dht.get("status"): + for x in switchpeers["response"]["switchpeers"].iteritems(): + if valid_ipv6_check(x[1]["ip"]) and check_coords(x[1]["coords"]): + insert_new_entry(DB_PATH, x[1]["ip"], x[1]["coords"], int(time.time())) + except: + print("error in json file, aborting") + +def proccess_incoming_data(datty, addr): + print addr + try: + data = json.loads(datty.decode()) + error_check_insert_into_db(data["dhtpack"], data["switchpack"]) + except: + print "ignoring, data was not json" + +isdatabase(DB_PATH) + +conn = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) +conn.bind((SERVER, 45671)) + +while True: + try: + dataraw, addr = conn.recvfrom(1024 * 20) + thread.start_new_thread(proccess_incoming_data, (dataraw, addr)) + except: + print "bloop"