FreedomCoder-esearchy 0.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -10,7 +10,7 @@ Esearchy is a small library capable of searching the internet for email addresse
10
10
  * AltaVista
11
11
  * Social Networks:
12
12
  * LinkedIn
13
- * Google Profiles ( Based on DigiNinja's idea http://www.digininja.org/files/gpscan.rb )
13
+ * Google Profiles ( Based on DigiNinja's idea http://www.digininja.org/projects/gpscan.php)
14
14
  * Naymz
15
15
  * PGP servers
16
16
  * Usenets
@@ -122,6 +122,7 @@ Not short of that now, we also have the possibility of choosing between a Librar
122
122
 
123
123
  * http://www.penetrationtests.com/ [Penetration Testing Directory]
124
124
  * http://www.mundoruby.com.ar/ [Ruby's News Aggregator]
125
+ * http://www.digininja.org/ [DigiNinja's Website]
125
126
 
126
127
  == LICENSE:
127
128
 
data/bin/esearchy CHANGED
@@ -9,10 +9,12 @@ require 'esearchy'
9
9
  @maxhits = nil
10
10
  @domains = []
11
11
  @output = nil
12
+ @company = []
12
13
 
13
14
  opts = GetoptLong.new(
14
15
  [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
15
16
  ['--domain','-d', GetoptLong::REQUIRED_ARGUMENT ],
17
+ ['--company','-c', GetoptLong::REQUIRED_ARGUMENT ],
16
18
  ['--file','-f', GetoptLong::REQUIRED_ARGUMENT ],
17
19
  ['--filter','-p', GetoptLong::REQUIRED_ARGUMENT ],
18
20
  ['--output','-o', GetoptLong::REQUIRED_ARGUMENT ],
@@ -41,10 +43,14 @@ opts.each do |opt, arg|
41
43
  exit(0)
42
44
  when '--domain':
43
45
  @domains << arg
46
+ when '--company':
47
+ @company << arg
44
48
  when '--file':
45
49
  if File.exists?(arg)
46
50
  open(arg,'r').each_line do |line|
47
- @domains << line
51
+ d,c = line.split(',')
52
+ @domains << d
53
+ @company << c
48
54
  end
49
55
  else
50
56
  ESearchy::LOG.puts "File not found"
@@ -57,6 +63,8 @@ opts.each do |opt, arg|
57
63
  @pattern = arg
58
64
  when '--output':
59
65
  @output = arg
66
+ when '--licredentials':
67
+ @li_username, @li_password = arg.split(":")
60
68
  when '--maxhits':
61
69
  @maxhits = arg
62
70
  else
@@ -66,12 +74,19 @@ opts.each do |opt, arg|
66
74
  end
67
75
 
68
76
  require 'esearchy'
77
+ puts "This is just an example tool ESearchy is more and more a piece of code intended to work as a Library and you should create your own little.rb file :)"
69
78
 
70
- @domains.each do |domain|
79
+ @domains.each_with_index do |domain, idx|
71
80
  ESearchy.create domain do |d|
72
81
  d.yahoo_key = @yahoo_key if @yahoo_key
73
82
  d.bing_key = @bing_key if @bing_key
74
83
  d.maxhits = @maxhits if @maxhits
84
+ if @li_username and @li_password
85
+ d.linkedin_credentials = (@li_username, @li_password)
86
+ else
87
+ d.linkedin_credentials = ESearchy.bugmenot
88
+ end
89
+ d.company_name = @company[idx] unless @company.empty?
75
90
  d.search
76
91
  d.save_to_file @output if @output
77
92
  end
@@ -36,7 +36,7 @@ class GoogleGroups
36
36
  if @totalhits > @start
37
37
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-100} to #{@start}"
38
38
  search_emails(response.body)
39
- sleep(4)
39
+ sleep(ESearchy::DELAY)
40
40
  search(query)
41
41
  else
42
42
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-100} to #{@start}"
@@ -36,7 +36,7 @@ class Altavista
36
36
  if @totalhits > @start
37
37
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-50} to #{@start}"
38
38
  search_emails(response.body.gsub(/<b>|<\/b>/,""))
39
- sleep(4)
39
+ sleep(ESearchy::DELAY)
40
40
  search(query)
41
41
  else
42
42
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-50} to #{@start}"
@@ -37,7 +37,7 @@ class Bing
37
37
  if @totalhits > @start
38
38
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-50} to #{@start}"
39
39
  search_emails(response.body)
40
- sleep(4)
40
+ sleep(ESearchy::DELAY)
41
41
  search(query)
42
42
  else
43
43
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-50} to #{@start}"
@@ -36,7 +36,7 @@ class Google
36
36
  if @totalhits > @start
37
37
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-100} to #{@start}"
38
38
  search_emails(response.body.gsub(/<em>|<\/em>/,""))
39
- sleep(4)
39
+ sleep(ESearchy::DELAY)
40
40
  search(query)
41
41
  else
42
42
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-100} to #{@start}"
@@ -37,7 +37,7 @@ class Yahoo
37
37
  if @totalhits > @start
38
38
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-50} to #{@start}"
39
39
  search_emails(response.body)
40
- sleep(4)
40
+ sleep(ESearchy::DELAY)
41
41
  search(@query)
42
42
  else
43
43
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-50} to #{@start}"
@@ -44,7 +44,7 @@ class GoogleProfiles
44
44
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-100} to #{@start}"
45
45
  parse(response.body)
46
46
  search_emails(response.body.gsub(/<em>|<\/em>/,""))
47
- sleep(4)
47
+ sleep(ESearchy::DELAY)
48
48
  search(query)
49
49
  else
50
50
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-100} to #{@start}"
@@ -18,7 +18,7 @@ class LinkedIn
18
18
  @company_name = nil
19
19
  @cookie = nil
20
20
  end
21
- attr_accessor :emails, :username, :password, :company_name
21
+ attr_accessor :emails, :username, :password, :company_name, :people
22
22
 
23
23
  def login
24
24
  begin
@@ -76,7 +76,7 @@ class LinkedIn
76
76
  ESearchy::LOG.puts "Searching in: #{self.class} up to point #{@start}"
77
77
  search_people(response.body)
78
78
  create_emails
79
- sleep(4)
79
+ sleep(ESearchy::DELAY)
80
80
  search(@query)
81
81
  else
82
82
  ESearchy::LOG.puts "Searching in: #{self.class} up to point #{@start}"
@@ -41,7 +41,7 @@ class Naymz
41
41
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-100} to #{@start}"
42
42
  parse(response.body)
43
43
  search_emails(response.body.gsub(/<em>|<\/em>/,""))
44
- sleep(4)
44
+ sleep(ESearchy::DELAY)
45
45
  search(query)
46
46
  else
47
47
  ESearchy::LOG.puts "Searching #{self.class} from #{@start-100} to #{@start}"
@@ -7,13 +7,17 @@ class BMN
7
7
  end
8
8
 
9
9
  def self.fetch_user(domain)
10
- url = Net::HTTP.get URI.parse("http://www.bugmenot.com/view/#{domain}")
11
- key = ( url.scan(/var key =(.*);/)[0][0].to_i + 112 ) / 12
10
+ begin
11
+ url = Net::HTTP.get URI.parse("http://www.bugmenot.com/view/#{domain}")
12
+ key = ( url.scan(/var key =(.*);/)[0][0].to_i + 112 ) / 12
12
13
 
13
- user, pass = url.scan(/tr><th>Username <\/th><td><script>d\('(.*)'\);<\/script><\/td><\/tr>
14
+ user, pass = url.scan(/tr><th>Username <\/th><td><script>d\('(.*)'\);<\/script><\/td><\/tr>
14
15
  [\n\s]+<tr><th>Password <\/th><td><script>d\('(.*)'\);<\/script><\/td><\/tr>/)[0]
15
- user = decode(user,key)
16
- pass = decode(pass,key)
17
- return user, pass
16
+ user = decode(user,key)
17
+ pass = decode(pass,key)
18
+ return user, pass
19
+ rescue
20
+ return nil,nil
21
+ end
18
22
  end
19
23
  end
@@ -19,7 +19,7 @@ module Searchy
19
19
  (?:\.[a-z0-9!#$&'*+=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z](?:[a-z-]*[a-z])?|\
20
20
  [a-z0-9!#$&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$&'*+=?^_`{|}~-]+)*\s@\s(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+\
21
21
  [a-z](?:[a-z-]*[a-z])?|[a-z0-9!#$&'*+=?^_`{|}~-]+(?:\sdot\s[a-z0-9!#$&'*+=?^_`\
22
- {|}~-]+)*\sat\s(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\sdot\s)+[a-z](?:[a-z-]*[a-z])??/)
22
+ {|}~-]+)*\sat\s(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\sdot\s)+[a-z](?:[a-z-]*[a-z])??/i)
23
23
  @lock.synchronize do
24
24
  print_emails(list)
25
25
  @emails.concat(fix(list)).uniq!
@@ -29,7 +29,7 @@ module Searchy
29
29
  def search_pdfs(urls)
30
30
  while urls.size >= 1
31
31
  @threads << Thread.new do
32
- web = URI.parse(urls.pop)
32
+ web = URI.parse(urls.pop.gsub(' ','+'))
33
33
  ESearchy::LOG.puts "Searching in PDF: #{web.to_s}\n"
34
34
  begin
35
35
  http = Net::HTTP.new(web.host,80)
@@ -71,7 +71,7 @@ module Searchy
71
71
  def search_docs(urls)
72
72
  while urls.size >= 1
73
73
  @threads << Thread.new do
74
- web = URI.parse(urls.pop)
74
+ web = URI.parse(urls.pop.gsub(' ','+'))
75
75
  ESearchy::LOG.puts "Searching in DOC: #{web.to_s}\n"
76
76
  begin
77
77
  http = Net::HTTP.new(web.host,80)
@@ -140,7 +140,7 @@ module Searchy
140
140
  def search_office_xml(urls)
141
141
  while urls.size >= 1
142
142
  @threads << Thread.new do
143
- web = URI.parse(urls.pop)
143
+ web = URI.parse(urls.pop.gsub(' ','+'))
144
144
  #format = web.scan(/docx|xlsx|pptx/i)[0]
145
145
  format = web.scan(/docx|xlsx|pptx|odt|odp|ods|odb/i)[0]
146
146
  ESearchy::LOG.puts "Searching in #{format.upcase}: #{web.to_s}\n"
@@ -183,7 +183,7 @@ module Searchy
183
183
  def search_txts(urls)
184
184
  while urls.size >= 1
185
185
  @threads << Thread.new do
186
- web = URI.parse(urls.pop)
186
+ web = URI.parse(urls.pop.gsub(' ','+'))
187
187
  ESearchy::LOG.puts "Searching in #{web.to_s.scan(/txt|rtf|ans/i)[0].upcase}: #{web.to_s}\n"
188
188
  begin
189
189
  http = Net::HTTP.new(web.host,80)
data/lib/esearchy.rb CHANGED
@@ -10,6 +10,7 @@ class ESearchy
10
10
  #Constants
11
11
  LIBRARY = 1
12
12
  APP = 2
13
+ DELAY = 4
13
14
  LOG = Logger.new(1, $stdout)
14
15
  BUGMENOT = BMN::fetch_user("linkedin.com")
15
16
  DEFAULT_ENGINES = [:Google, :Bing, :Yahoo, :PGP, :LinkedIn,
@@ -30,6 +31,10 @@ class ESearchy
30
31
  ESearchy::LOG.file = value
31
32
  end
32
33
 
34
+ def delay=(value)
35
+ ESearch.DELAY = value
36
+ end
37
+
33
38
  def initialize(options={}, &block)
34
39
  @query = options[:query]
35
40
  @depth_search = options[:depth] || true
@@ -79,7 +84,7 @@ class ESearchy
79
84
 
80
85
  def people
81
86
  people = []
82
- [:LinkedIn, :GoogleProfiles].each do |e|
87
+ [:LinkedIn, :GoogleProfiles, :Naymz].each do |e|
83
88
  people.concat(@engines[e].people) if @engines[e]
84
89
  end
85
90
  people.uniq!
@@ -147,7 +152,7 @@ class ESearchy
147
152
 
148
153
  def search_engine(key, value)
149
154
  if [:Google, :Bing, :Yahoo, :PGP, :LinkedIn,
150
- :GoogleGroups, :AltaVisa, :Usenet, :GoogleProfiles, Naymz].include?(key)
155
+ :GoogleGroups, :Altavista, :Usenet, :GoogleProfiles, :Naymz].include?(key)
151
156
  if value == true
152
157
  unless @engines[key]
153
158
  @engines[key] = instance_eval "#{key}.new(@maxhits)"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: FreedomCoder-esearchy
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matias P. Brutti