Package killerbee :: Package openear :: Module capture
[hide private]
[frames] | no frames]

Source Code for Module killerbee.openear.capture

 1  import sys 
 2  from datetime import datetime 
 3  import threading, signal 
 4  from killerbee import * 
 5   
 6  # Globals 
 7  triggers = [] 
 8   
 9  # startCapture 
10  # Given a database and a key into the database's networks table, 
11  #  initiate a pcap and online database capture. 
12 -def startCapture(dev, capChan):
13 timeLabel = datetime.now().strftime('%Y%m%d-%H%M') 14 print 'Cap%s: Launching a capture on channel %s.' % (dev, capChan) 15 fname = 'zb_c%s_%s.pcap' % (capChan, timeLabel) #fname is -w equiv 16 signal.signal(signal.SIGINT, interrupt) 17 trigger = threading.Event() 18 triggers.append(trigger) 19 CaptureThread(capChan, dev, fname, trigger).start()
20 21 # Called on keyboard interput to exit threads and exit the scanner script.
22 -def interrupt(signum, frame):
23 global triggers 24 for trigger in triggers: 25 trigger.set() 26 sys.exit(1)
27 28 # Thread to capture a given channel, using a given device, to a given filename 29 # exits when trigger (threading.Event object) is set.
30 -class CaptureThread(threading.Thread):
31 - def __init__(self, channel, devstring, fname, trigger):
32 self.channel = channel 33 self.devstring = devstring 34 self.trigger = trigger 35 self.pd = PcapDumper(DLT_IEEE802_15_4, fname) 36 self.packetcount = 0 37 threading.Thread.__init__(self)
38 - def run(self):
39 self.kb = KillerBee(device=self.devstring, datasource="Wardrive Live") 40 self.kb.set_channel(self.channel) 41 self.kb.sniffer_on() 42 print "Capturing on \'%s\' at channel %d." % (self.kb.get_dev_info()[0], self.channel) 43 # loop capturing packets to dblog and file 44 while not self.trigger.is_set(): 45 packet = self.kb.pnext() 46 if packet != None: 47 self.packetcount+=1 48 try: self.kb.dblog.add_packet(full=packet) 49 except: pass #temporary hack. should migrate exception handling from zbwardrive 50 self.pd.pcap_dump(packet[0]) 51 # trigger threading.Event set to false, so shutdown thread 52 self.kb.sniffer_off() 53 self.kb.close() 54 self.pd.close() 55 print "%d packets captured" % self.packetcount
56