#!/usr/bin/env python # -*- coding: iso-8859-15 -*- """ BC (Border-Check) is a tool to retrieve info of traceroute tests over website navigation routes. GPLv3 - 2013-2014-2015 by psy (epsylon@riseup.net) """ from xml.dom.minidom import parseString import xml.etree.ElementTree as ET import re import traceback reload=False try: bc_status_file = open('bc.status') s = str(bc_status_file.read()) if s =='fresh': with open('bc.status', 'w') as file: file.write("old") reload=True except: pass # todo : # * call ajax.py from here # * save last url timestamp as get parameter # * do parsing only if timestamp changes # * ui integration #function to split ISP company names from ASN def ASN_Split(asn): name_parts = [] for i in asn.split(): if re.match(r'AS\d{1,6}$', i): asn = i elif not re.match(r'AS\d{1,6}$', i): name_parts.append(i) company = ' '.join(name_parts) return (asn, company) def extract_data(): url="" hop_list = [] hop_ip_list =[] geoarray = [] latlong= [] asn_list =[] server_name_list = [] timestamp_list = [] telco_list = [] country_code_list = [] last_hop = 0 n_hops=0 unique_country_code_list = [] # extract data from a xml file f = open('data.xml', 'r') f2 = open('data.xml', 'r') xml = ET.parse(f) data = f2.read() dom = parseString(data.encode('utf-8')) f.close() f2.close() last_hop = int(xml.findall('hop')[-1].text) n_hops = dom.getElementsByTagName('hop')[-1].toxml().replace('', '').replace('','').replace('','') asn = hop_element.getElementsByTagName('asn')[0].toxml().replace('','').replace('','') hop_ip = hop_element.getElementsByTagName('hop_ip')[0].toxml().replace('','').replace('','') longitude = hop_element.getElementsByTagName('longitude')[0].toxml().replace('','').replace('','') latitude = hop_element.getElementsByTagName('latitude')[0].toxml().replace('','').replace('','') timestamp = hop_element.getElementsByTagName('timestamp')[0].toxml().replace('','').replace('','') country_code = hop_element.getElementsByTagName('country_code')[0].toxml().replace('','').replace('','') latlong = [float(latitude.encode('utf-8')), float(longitude.encode('utf-8'))] geoarray.append(latlong) asn_list.append(ASN_Split(asn.encode('utf-8'))[0]) telco_list.append(ASN_Split(asn.encode('utf-8'))[1]) hop = int(hop) +1 hop_list.append(str(hop)) hop_ip_list.append(hop_ip.encode('utf-8')) server_name_list.append(server_name.encode('utf-8')) timestamp_list.append(float(timestamp)) country_code_list.append(country_code.encode('utf-8')) unique_country_code_list = set(country_code_list) return """ """ try: if reload: output=extract_data() except: args['error']="No data available" traceback.print_exc() reload=False if 'error' in args: output=output+''