From 75f92c141b1fffa84d72f9c37b5083a99e2ca51f Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Fri, 29 Nov 2013 14:49:06 +0200 Subject: Shapefile serialization almost working --- kismet-gps-tools.py | 52 +++++++++++++++++++++++++++++++++++++++++++++------- requirements.txt | 1 + 2 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 requirements.txt diff --git a/kismet-gps-tools.py b/kismet-gps-tools.py index 76cb21f..4805d02 100755 --- a/kismet-gps-tools.py +++ b/kismet-gps-tools.py @@ -1,18 +1,48 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python import argparse import sys import xml.etree.ElementTree as ET +try: + import shapefile + shapefile_loaded = True +except ImportError: + shapefile_loaded = False + from pprint import pprint +class WirelessNetwork(object): + def __init__(self, essid, lat, lng): + self.essid = essid + self.lat = lat + self.lng = lng + + class ShapeFileSerializer(object): _serializer_id = 'shapefile' + def __init__(self, networks): + if not shapefile_loaded: + raise Exception('Shapefile serializing requires the pyshp library, which cannot be found.') + self.networks = networks + + def serialize(self): + w = shapefile.Writer(shapefile.POINT) + for network in self.networks: + w.point(network.lat, network.lng) + w.save('test') + class KMLSerialzier(object): _serializer_id = 'kml' + def __init__(self, networks): + self.networks = networks + + def serialize(self): + raise Exception('KML serializing not implemented yet') + class NetXMLParser(object): def __init__(self, filename): @@ -21,18 +51,26 @@ class NetXMLParser(object): def parse(self): root = ET.parse(self.filename).getroot() wireless_networks = root.iter('wireless-network') - for network in wireless_networks: - self.parse_network(network) + return filter(None, [self.parse_network(network) for network in wireless_networks]) def parse_network(self, network): bssid = network.find('BSSID').text - ssid = network.find('SSID') - if ssid: - print ssid.find('essid').text + ssid = network.find('SSID') + gpsinfo = network.find('gps-info') + if ssid and gpsinfo: + essid = ssid.find('essid').text + lat = float(gpsinfo.find('avg-lat').text) + lng = float(gpsinfo.find('avg-lon').text) + return WirelessNetwork(essid, lat, lng) + return None def run(input_filename, output_format): - NetXMLParser(input_filename).parse() + networks = NetXMLParser(input_filename).parse() + for c in (KMLSerialzier, ShapeFileSerializer): + if c._serializer_id == output_format: + serializer = c(networks) + serializer.serialize() if __name__ == '__main__': diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..66e82e2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pyshp==1.2.0 -- cgit v1.3.1