diff options
| author | Yuval Adam <yuv.adm@gmail.com> | 2013-11-29 14:49:06 +0200 |
|---|---|---|
| committer | Yuval Adam <yuv.adm@gmail.com> | 2013-11-29 14:49:06 +0200 |
| commit | 75f92c141b1fffa84d72f9c37b5083a99e2ca51f (patch) | |
| tree | bde0b2731e665a32acfadd065b8a4f6254dfdc42 | |
| parent | 8c0bbcea03503cfda4bda4a9ff57450263dd431d (diff) | |
Shapefile serialization almost working
| -rwxr-xr-x | kismet-gps-tools.py | 52 | ||||
| -rw-r--r-- | requirements.txt | 1 |
2 files changed, 46 insertions, 7 deletions
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 |
