Class: Baffle::Gui

Inherits:
Object
  • Object
show all
Defined in:
lib/baffle/gui.rb

Constant Summary collapse

@@glade_path =
File.expand_path(File.join(File.dirname(__FILE__), 'gui.glade'))

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Gui

Returns a new instance of Gui.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/baffle/gui.rb', line 15

def initialize(options)
  @glade = GladeXML.new(@@glade_path) { |handler| method(handler) }
  @options = options
  @scan_lock = Mutex.new
  
  @window = @glade.get_widget('window')
  @window.signal_connect("destroy") { Gtk.main_quit }
  
  @mac_addresses = @glade.get_widget('mac_addresses')
  @mac_addresses.model = Gtk::ListStore.new(String)
  @mac_addresses.text_column = 0
  
  @results = @glade.get_widget('results')
  
  on_refresh_clicked(@mac_addresses)
end

Instance Method Details

#on_load_clicked(widget) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/baffle/gui.rb', line 69

def on_load_clicked(widget)
  dialog = Gtk::FileChooserDialog.new("Choose a Kismet CSV file", @window, Gtk::FileChooser::ACTION_OPEN, nil, [Gtk::Stock::OPEN, Gtk::Dialog::RESPONSE_ACCEPT], [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL])
  
  if dialog.run == Gtk::Dialog::RESPONSE_ACCEPT
    @mac_addresses.model.clear
    
    File.open(dialog.filename).each_line do |line|
      num, type, essid, bssid, rest = line.split(';')
      
      @mac_addresses.append_text("#{bssid} #{essid}") if type == 'infrastructure' && bssid =~ /^(([0-9a-fA-F]{2}[:]){5}[0-9a-fA-F]{2})$/
    end
    
    @mac_addresses.active = 0
  end
  
  dialog.destroy
end

#on_refresh_clicked(widget) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/baffle/gui.rb', line 32

def on_refresh_clicked(widget)
  iwlist = `iwlist #{@options.capture} scan`
  
  essid = nil
  bssid = nil
  
  @mac_addresses.model.clear
  
  iwlist.each_line do |line|
    bssid = $1 if line =~ /Cell \d+ - Address: (([0-9a-fA-F]{2}[:]){5}[0-9a-fA-F]{2})/
    essid = $1 if line =~ /ESSID:"([^"]+)"/
    
    @mac_addresses.append_text("#{bssid} #{essid}") if essid 
    
    essid = nil
  end
  
  @mac_addresses.active = 0
end

#on_remove_clicked(widget) ⇒ Object



64
65
66
67
# File 'lib/baffle/gui.rb', line 64

def on_remove_clicked(widget)
  @mac_addresses.remove_text(@mac_addresses.active)
  @mac_addresses.active = 0
end

#on_scan_all_clicked(widget) ⇒ Object



57
58
59
60
61
62
# File 'lib/baffle/gui.rb', line 57

def on_scan_all_clicked(widget)
  @mac_addresses.model.each do |model, path, iter|
    args = parse(iter.get_value(0))
    scan(*args) if args
  end
end

#on_scan_selected_clicked(widget) ⇒ Object



52
53
54
55
# File 'lib/baffle/gui.rb', line 52

def on_scan_selected_clicked(widget)
  args = parse(@mac_addresses.active_text)
  scan(*args) if args
end