source: src/django_gheat/gheat/management/commands/dataimport.py@ 9557

Last change on this file since 9557 was 9123, checked in by dennisw, 14 years ago

Fixed encryption, problem with duplicate accespoints solved somehow (local problem I guess).

  • Property svn:executable set to *
File size: 3.2 KB
Line 
1#!/usr/bin/env python
2#
3###########################################
4#
5# Script for importing .netxml files (Kismet output)
6#
7# In theory, only the -f option is needed, but for overview's sake, please use the others aswell.
8# -f = location of the .netxml, e.g. '/home/test.netxml'
9# -m = name of the dataset, e.g. 'Walk in park' or 'Trip with boat'
10# -g = your name
11# -e = your email address
12#
13# (Run from project root)
14# ./manage.py dataimport -f <file location> -m <dataset name> -g <username> -e <email>
15#
16# Make sure your file has atleast the following elements:
17#
18# <wireless-network>
19# <SSID>
20# <encryption> </encryption>
21# <essid cloaked=""> </essid>
22# </SSID>
23# <BSSID> </BSSID>
24# <gps-info>
25# <min-lat> </min-lat>
26# <min-lon> </min-lon>
27# </gps-info>
28# </wireless-network>
29#
30#
31# Dennis Wagenaar
32# d.wagenaar@gmail.com
33#
34###########################################
35
36from django.core.management import setup_environ
37from django.core.management.base import BaseCommand
38from optparse import OptionParser, make_option
39import settings
40setup_environ(settings)
41from gheat.models import *
42from lxml import etree
43import datetime
44
45def import_file(location, meetrondje, gebruiker, email):
46
47 datasource = etree.parse(location)
48 doc = datasource.findall('wireless-network')
49 kaart = datasource.find('card-source/card-source')
50 kaart = kaart.text
51 g, created = Gebruiker.objects.get_or_create(naam=gebruiker , email=email)
52 a, created = Apparatuur.objects.get_or_create(antenne='test' , kaart=kaart)
53 mr = MeetRondje.objects.create(datum=datetime.datetime.now() , naam=meetrondje , gebruiker=g , apparatuur=a)
54
55 for wnetwork in doc:
56 enc = wnetwork.find('SSID/encryption')
57 if enc != None: enc = True
58 else: enc = False
59 ssid = wnetwork.find('SSID/essid')
60 if ssid != None: ssid = ssid.text
61 else: ssid = 'hidden'
62 bssid = wnetwork.find('BSSID')
63 if bssid != None: bssid = bssid.text
64 min_sig = wnetwork.find('snr-info/min_signal_dbm')
65 if min_sig != None: min_sig = int(min_sig.text)
66 else: min_sig = (-99)
67 max_sig = wnetwork.find('snr-info/max_signal_dbm')
68 if max_sig != None: max_sig = int(max_sig.text)
69 else: max_sig= (-99)
70 lat = wnetwork.find('gps-info/min-lat')
71 if lat != None: lat = lat.text
72 lon = wnetwork.find('gps-info/min-lon')
73 if lon != None: lon = lon.text
74 if ssid is None: continue
75
76 avg_sig = (min_sig+max_sig)/2
77 sig = (1.67*avg_sig)+166.67
78 if sig > 100: sig = 100
79 if sig < 0: sig = 0
80
81 print enc, ssid, bssid, lat, lon, sig
82
83 ap, created = Accespoint.objects.get_or_create(mac=bssid, ssid=ssid, encryptie=enc)
84 m = Meting.objects.create(meetrondje=mr, accespoint=ap, latitude=lat, longitude=lon, signaal=sig)
85
86
87class Command(BaseCommand):
88 option_list = BaseCommand.option_list + (
89 make_option('-f', '--location', dest='location', default='location'),
90 make_option('-m', '--meetrondje', dest='meetrondje', default='rondje'),
91 make_option('-g', '--gebruiker', dest='gebruiker', default='username'),
92 make_option('-e', '--email', dest='email', default='foo@bar.org'),
93 )
94
95 def handle(self, *args, **options):
96 import_file(options['location'],options['meetrondje'],options['gebruiker'],options['email'])
Note: See TracBrowser for help on using the repository browser.