summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xkismet-gps-tools.py52
-rw-r--r--requirements.txt1
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