domainblob 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +37 -0
- data/bin/db +61 -0
- data/lib/domainblob.rb +17 -0
- data/lib/domainblob/check_file.rb +70 -0
- data/lib/domainblob/cli.rb +19 -0
- data/lib/domainblob/domain_checker.rb +130 -0
- data/lib/domainblob/lists/misc.rb +41 -0
- data/lib/domainblob/lists/prefixes.rb +70 -0
- data/lib/domainblob/lists/suffixes.rb +80 -0
- data/lib/domainblob/lists/us_states.rb +49 -0
- data/lib/domainblob/outputs.rb +55 -0
- data/lib/domainblob/quick_check.rb +22 -0
- data/lib/domainblob/seed_generator.rb +73 -0
- data/lib/domainblob/version.rb +4 -0
- metadata +130 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3e718a846cc24309e0f359b014ddecf550915878
|
4
|
+
data.tar.gz: 285a15bf02c59d84a778b960fab84b7873a35f8e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3c2beda81b701c3604e54835ebc2107cb09745af2152cb7557817b3b500c9768c7f5211ce3f0bbadc76a1634510d29fa712064a72a2f2e3902b54e4f2becaaf2
|
7
|
+
data.tar.gz: 82d74446a159bb92bd4749c5e7418101a6ef512017d2732115c69143c9e34ed0c3b1630f697e91b71730aaaf2ace6079ca52b6f7dfdc97715894ac6b8893fb5b
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
2015 (c) Joseph Michael Norton - @joenorton - http://Norton.io
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
domainblob
|
2
|
+
==========
|
3
|
+
Domain Name Lookup Tool
|
4
|
+
|
5
|
+
Required Gems:
|
6
|
+
==============
|
7
|
+
* Whois
|
8
|
+
* Open-uri
|
9
|
+
* Resolv
|
10
|
+
|
11
|
+
How to use:
|
12
|
+
===========
|
13
|
+
```
|
14
|
+
ruby domainblob.rb insert_cool_word_here
|
15
|
+
```
|
16
|
+
|
17
|
+
2 Methods --- Command-line Arguments or Text File
|
18
|
+
|
19
|
+
Command-Line Args:
|
20
|
+
1. When you run the script, with **ruby domainblob.rb insert_cool_word_here** then it will use your root phrase to check over 5,000 potential domain names for availability.
|
21
|
+
2. Sit tight, it takes about 1 second per domain check. This amounts to somewhere between an hour and 2 for an entire batch to run.
|
22
|
+
3. When it is done, it will create a text document named after the phrase you used as your seed - followed by the number found to be available. It will put this result file into your newly created 'blobs' folder. Example: blobs/Tech30.txt
|
23
|
+
|
24
|
+
Text File:
|
25
|
+
1. Create a txt document named **totalPhraseList.txt** in the same directory as the script
|
26
|
+
2. The script will process each line of the **totalPhraseList.txt** document, so put one seed word per each line and they will be run right after another.
|
27
|
+
3. When you run the script, with **ruby domainblob.rb** then it will use your root phrase to check a couple hundred potential domain names for availability.
|
28
|
+
4. Sit tight.
|
29
|
+
5. When it is done, it will create a text document named after the phrase you used as your seed - followed by the number of domains found. Example: blobs/Tech30.txt
|
30
|
+
|
31
|
+
How Long Does it Take?
|
32
|
+
=====================
|
33
|
+
It takes a while. We do not use the RegEx & Zone File method for finding domain name availability. While that would be fastest, I do not have Zone File Access and even if I did -- I would not be allowed to distribute that Zone File.
|
34
|
+
|
35
|
+
License:
|
36
|
+
========
|
37
|
+
GNU GPLv3 (http://www.gnu.org/licenses/gpl.html)
|
data/bin/db
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
##################################################################
|
2
|
+
# ####DomainBlob.rb -- quick domain-name lookup and idea generation
|
3
|
+
# ####created by Joe Norton
|
4
|
+
# ####http://norton.io
|
5
|
+
# #LICENSING: GNU GPLv3 License##################################
|
6
|
+
#! usr/bin/ruby
|
7
|
+
|
8
|
+
require 'domainblob'
|
9
|
+
require 'optparse'
|
10
|
+
|
11
|
+
options = {}
|
12
|
+
optparse = OptionParser.new do |opts|
|
13
|
+
# Set a banner, displayed at the top
|
14
|
+
# of the help screen.
|
15
|
+
opts.banner = 'Usage: db [MODE FLAG] [options] seed_keyword'
|
16
|
+
# Define the options, and what they do
|
17
|
+
options['verbose'] = false
|
18
|
+
opts.on('-v', '--verbose', 'Output more information') do
|
19
|
+
options['verbose'] = true
|
20
|
+
end
|
21
|
+
options['checkfile'] = false
|
22
|
+
opts.on('-c', '--check', 'MODE FLAG: Checkfile mode') do
|
23
|
+
options['checkfile'] = true
|
24
|
+
end
|
25
|
+
options['phraselist'] = false
|
26
|
+
opts.on('-l', '--list', 'MODE FLAG: Phraselist mode') do
|
27
|
+
options['phraselist'] = true
|
28
|
+
end
|
29
|
+
options['quickcheck'] = false
|
30
|
+
opts.on('-q', '--quickcheck', 'MODE FLAG: QuickCheck mode') do
|
31
|
+
options['quickcheck'] = true
|
32
|
+
end
|
33
|
+
# This displays the help screen, all programs are
|
34
|
+
# assumed to have this option.
|
35
|
+
opts.on('-h', '--help', 'Display this screen') do
|
36
|
+
puts opts
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
optparse.parse!
|
42
|
+
if ARGV[0].nil?
|
43
|
+
abort("###Missing Required Argument\nUsage: db [mode] [options] seed_keyword")
|
44
|
+
end
|
45
|
+
|
46
|
+
if options['verbose']
|
47
|
+
puts '###############################'
|
48
|
+
puts '### [Domainblob]'
|
49
|
+
puts '### Being verbose'
|
50
|
+
puts '### In CheckFile Mode' if options['checkfile']
|
51
|
+
puts '### In PhraseList Mode' if options['phraselist']
|
52
|
+
puts '### In QuickCheck Mode' if options['quickcheck']
|
53
|
+
puts "### ARGS: #{ARGV}"
|
54
|
+
puts "### Opts: #{options}"
|
55
|
+
end
|
56
|
+
puts '###############################'
|
57
|
+
puts '### Starting [Domainblob]'
|
58
|
+
Domainblob::CLI.new(ARGV, options)
|
59
|
+
puts '### [Domainblob] is done.'
|
60
|
+
puts '###############################'
|
61
|
+
puts
|
data/lib/domainblob.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
##################################################################
|
2
|
+
# ####DomainBlob.rb -- quick domain-name lookup and idea generation
|
3
|
+
# ####created by Joe Norton
|
4
|
+
# ####http://norton.io
|
5
|
+
# #LICENSING: GNU GPLv3 License##################################
|
6
|
+
# ! usr/bin/ruby
|
7
|
+
|
8
|
+
require 'domainblob/outputs.rb'
|
9
|
+
require 'domainblob/cli.rb'
|
10
|
+
require 'domainblob/domain_checker.rb'
|
11
|
+
require 'domainblob/seed_generator.rb'
|
12
|
+
require 'domainblob/check_file.rb'
|
13
|
+
require 'domainblob/quick_check.rb'
|
14
|
+
require 'domainblob/version.rb'
|
15
|
+
|
16
|
+
module Domainblob
|
17
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
##################################################################
|
2
|
+
# ####DomainBlob.rb -- quick domain-name lookup and idea generation
|
3
|
+
# ####created by Joe Norton
|
4
|
+
# ####http://norton.io
|
5
|
+
# #LICENSING: GNU GPLv3 License##################################
|
6
|
+
# ! usr/bin/ruby
|
7
|
+
|
8
|
+
module Domainblob
|
9
|
+
class CheckFile < DomainChecker
|
10
|
+
def initialize(q_file, options)
|
11
|
+
super
|
12
|
+
q_file = q_file.first
|
13
|
+
results_file = File.new(q_file + '_results' + RESULT_FILE_EXT, 'w+')
|
14
|
+
start(q_file, results_file)
|
15
|
+
end
|
16
|
+
|
17
|
+
def start(q_file, results_file)
|
18
|
+
make_and_or_nav_to_dir(RESULT_DIR_NAME)
|
19
|
+
@o.start_output(results_file, q_file)
|
20
|
+
w = Whois::Client.new
|
21
|
+
seeds = File.readlines(@pwd + '/' + q_file + RESULT_FILE_EXT)
|
22
|
+
for q in seeds
|
23
|
+
q.strip!
|
24
|
+
next if q.nil? || q.empty?
|
25
|
+
lg(q)
|
26
|
+
if valid_domain_name?(q)
|
27
|
+
begin
|
28
|
+
domain_available?(w, q)
|
29
|
+
rescue
|
30
|
+
next
|
31
|
+
end
|
32
|
+
else
|
33
|
+
if valid_domain_name?(q+'.com')
|
34
|
+
begin
|
35
|
+
domain_available?(w, q+'.com')
|
36
|
+
rescue
|
37
|
+
next
|
38
|
+
end
|
39
|
+
end
|
40
|
+
next
|
41
|
+
end
|
42
|
+
end
|
43
|
+
finish(q_file, results_file)
|
44
|
+
end
|
45
|
+
def finish(q_file, results_file)
|
46
|
+
avail_num = @avail.length
|
47
|
+
@avail = @avail.sort_by(&:length)
|
48
|
+
#
|
49
|
+
@o.write_results(results_file, @avail)
|
50
|
+
#
|
51
|
+
stop_clock
|
52
|
+
#
|
53
|
+
@o.ending_output(
|
54
|
+
timeDiff = @time_diff,
|
55
|
+
availNum = avail_num,
|
56
|
+
whoiscounter = @whoiscounter,
|
57
|
+
httpcounter = @httpcounter,
|
58
|
+
blobResults = results_file
|
59
|
+
)
|
60
|
+
results_file.close
|
61
|
+
#
|
62
|
+
File.rename(
|
63
|
+
@pwd + '/' + q_file + '_results' + RESULT_FILE_EXT,
|
64
|
+
@pwd + '/' + q_file + '_results' + avail_num.to_s + RESULT_FILE_EXT
|
65
|
+
)
|
66
|
+
#
|
67
|
+
Dir.chdir('..')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
##################################################################
|
2
|
+
# ####DomainBlob.rb -- quick domain-name lookup and idea generation
|
3
|
+
# ####created by Joe Norton
|
4
|
+
# ####http://norton.io
|
5
|
+
# #LICENSING: GNU GPLv3 License##################################
|
6
|
+
# ! usr/bin/ruby
|
7
|
+
module Domainblob
|
8
|
+
class CLI
|
9
|
+
def initialize(q, options)
|
10
|
+
if options['checkfile']
|
11
|
+
Domainblob::CheckFile.new(q, options)
|
12
|
+
elsif options['quickcheck']
|
13
|
+
Domainblob::QuickCheck.new(q, options)
|
14
|
+
else
|
15
|
+
Domainblob::SeedGenerator.new(q, options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
##################################################################
|
2
|
+
# ####DomainBlob.rb -- quick domain-name lookup and idea generation
|
3
|
+
# ####created by Joe Norton
|
4
|
+
# ####http://norton.io
|
5
|
+
# #LICENSING: GNU GPLv3 License##################################
|
6
|
+
# ! usr/bin/ruby
|
7
|
+
|
8
|
+
module Domainblob
|
9
|
+
class DomainChecker
|
10
|
+
require 'whois'
|
11
|
+
require 'resolv'
|
12
|
+
RESULT_DIR_NAME = 'blobs'
|
13
|
+
RESULT_FILE_EXT = '.txt'
|
14
|
+
def initialize(q, options)
|
15
|
+
@whoiscounter = 0
|
16
|
+
@httpcounter = 0
|
17
|
+
@whoisdotnetcounter = 0
|
18
|
+
@avail = []
|
19
|
+
@start_time = Time.now
|
20
|
+
@o = Domainblob::Outputs.new
|
21
|
+
@pwd = Dir.pwd
|
22
|
+
setup_options(options)
|
23
|
+
end
|
24
|
+
|
25
|
+
def setup_options(options)
|
26
|
+
@verbose = true if options['verbose']
|
27
|
+
end
|
28
|
+
|
29
|
+
def make_and_or_nav_to_dir(_thePhrase)
|
30
|
+
if File.directory?(RESULT_DIR_NAME)
|
31
|
+
Dir.chdir(RESULT_DIR_NAME)
|
32
|
+
else
|
33
|
+
Dir.mkdir(RESULT_DIR_NAME)
|
34
|
+
Dir.chdir(RESULT_DIR_NAME)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
def sanitize_input(q)
|
38
|
+
q.strip
|
39
|
+
end
|
40
|
+
def valid_domain_name?(url)
|
41
|
+
if url =~ /[#$&;=\[\]()_~\,?]/
|
42
|
+
false
|
43
|
+
else
|
44
|
+
if url =~ /\./
|
45
|
+
lg('passed')
|
46
|
+
lg(url)
|
47
|
+
true
|
48
|
+
else
|
49
|
+
false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
def http_check_domain(query)
|
54
|
+
begin
|
55
|
+
entry = Resolv.getaddress(query)
|
56
|
+
rescue Resolv::ResolvError
|
57
|
+
return false # dns could not resolve, may still be registered
|
58
|
+
rescue Timeout::Error
|
59
|
+
retry # timeout, no info gained, retry?
|
60
|
+
end
|
61
|
+
if entry
|
62
|
+
@httpcounter += 1
|
63
|
+
return true # yes, domain is registered
|
64
|
+
else
|
65
|
+
return false # not sure why it would fail, so lets fail out of this f'n
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def domain_available?(w, domain)
|
70
|
+
if http_check_domain(domain) # if exists - this passes, and we'll return false out of this f'n
|
71
|
+
puts 'not available: ' + domain
|
72
|
+
return false # domain not available, false
|
73
|
+
else
|
74
|
+
begin
|
75
|
+
r = w.lookup(domain)
|
76
|
+
@whoiscounter += 1
|
77
|
+
if r.available?
|
78
|
+
puts 'AVAILABLE: ' + domain
|
79
|
+
@avail.push(domain) # yes, true, domain is available
|
80
|
+
return true
|
81
|
+
else
|
82
|
+
puts 'not available: ' + domain
|
83
|
+
return false
|
84
|
+
end
|
85
|
+
rescue Whois::ConnectionError
|
86
|
+
puts 'ConnectionError - skipping'
|
87
|
+
return false
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def get_root_domains(q)
|
93
|
+
w = Whois::Client.new
|
94
|
+
domain_available?(w, q + '.com')
|
95
|
+
domain_available?(w, q + '.org')
|
96
|
+
domain_available?(w, q + '.net')
|
97
|
+
domain_available?(w, q + '.co')
|
98
|
+
domain_available?(w, q + '.io')
|
99
|
+
domain_available?(w, q + '.ly')
|
100
|
+
end
|
101
|
+
|
102
|
+
def cycle_thru_all_prefix_and_suffix_lists(thePhrase)
|
103
|
+
Whois::Client.new(:timeout => nil) do |w|
|
104
|
+
for each_list in @prefix_array
|
105
|
+
for each_entry in each_list
|
106
|
+
domain_available?(w, each_entry + thePhrase + '.com')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
Whois::Client.new(:timeout => nil) do |w|
|
111
|
+
for each_list in @suffix_array
|
112
|
+
for each_entry in each_list
|
113
|
+
domain_available?(w, thePhrase + each_entry + '.com')
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
def stop_clock
|
119
|
+
@end_time = Time.now
|
120
|
+
@time_diff = @end_time - @start_time
|
121
|
+
end
|
122
|
+
def errlog(msg)
|
123
|
+
fail "ERROR: #{msg}"
|
124
|
+
end
|
125
|
+
|
126
|
+
def lg(msg)
|
127
|
+
puts "### #{msg}" if @verbose
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
@latinPreAndSuffixArray = %w(
|
2
|
+
io
|
3
|
+
virtus
|
4
|
+
ego
|
5
|
+
vox
|
6
|
+
ex
|
7
|
+
ideo
|
8
|
+
novo
|
9
|
+
novus
|
10
|
+
pax
|
11
|
+
rex
|
12
|
+
velox
|
13
|
+
verus
|
14
|
+
vivo
|
15
|
+
nova
|
16
|
+
)
|
17
|
+
@bothPreAndSuffixArray = %w(
|
18
|
+
media
|
19
|
+
direct
|
20
|
+
access
|
21
|
+
ez
|
22
|
+
easy
|
23
|
+
info
|
24
|
+
interactive
|
25
|
+
biz
|
26
|
+
buzz
|
27
|
+
bit
|
28
|
+
byte
|
29
|
+
up
|
30
|
+
tech
|
31
|
+
on
|
32
|
+
out
|
33
|
+
auto
|
34
|
+
pulse
|
35
|
+
x
|
36
|
+
venture
|
37
|
+
trend
|
38
|
+
life
|
39
|
+
retro
|
40
|
+
secret
|
41
|
+
)
|
@@ -0,0 +1,70 @@
|
|
1
|
+
@mainPrefixArray = %w(
|
2
|
+
the
|
3
|
+
x
|
4
|
+
my
|
5
|
+
i
|
6
|
+
me
|
7
|
+
we
|
8
|
+
you
|
9
|
+
e
|
10
|
+
top
|
11
|
+
pro
|
12
|
+
best
|
13
|
+
super
|
14
|
+
ultra
|
15
|
+
all
|
16
|
+
cyber
|
17
|
+
simply
|
18
|
+
free
|
19
|
+
1st
|
20
|
+
meta
|
21
|
+
re
|
22
|
+
metro
|
23
|
+
urban
|
24
|
+
head
|
25
|
+
hit
|
26
|
+
front
|
27
|
+
techno
|
28
|
+
ever
|
29
|
+
rush
|
30
|
+
think
|
31
|
+
solo
|
32
|
+
radio
|
33
|
+
vip
|
34
|
+
)
|
35
|
+
@latinPrefixArray = %w(
|
36
|
+
ubi
|
37
|
+
bis
|
38
|
+
ad
|
39
|
+
ambi
|
40
|
+
inter
|
41
|
+
liber
|
42
|
+
mono
|
43
|
+
poli
|
44
|
+
tele
|
45
|
+
omni
|
46
|
+
exo
|
47
|
+
extra
|
48
|
+
hyper
|
49
|
+
hypo
|
50
|
+
intro
|
51
|
+
proto
|
52
|
+
intra
|
53
|
+
micro
|
54
|
+
macro
|
55
|
+
multi
|
56
|
+
neo
|
57
|
+
iso
|
58
|
+
mono
|
59
|
+
)
|
60
|
+
@scientificPrefixArray = %w(
|
61
|
+
aero
|
62
|
+
cosmo
|
63
|
+
deca
|
64
|
+
eco
|
65
|
+
geo
|
66
|
+
hex
|
67
|
+
oxy
|
68
|
+
uni
|
69
|
+
poly
|
70
|
+
)
|
@@ -0,0 +1,80 @@
|
|
1
|
+
@locationSuffixArray = %w(
|
2
|
+
house
|
3
|
+
central
|
4
|
+
point
|
5
|
+
home
|
6
|
+
place
|
7
|
+
garden
|
8
|
+
site
|
9
|
+
spot
|
10
|
+
park
|
11
|
+
dome
|
12
|
+
bay
|
13
|
+
web
|
14
|
+
net
|
15
|
+
cave
|
16
|
+
base
|
17
|
+
heaven
|
18
|
+
portal
|
19
|
+
world
|
20
|
+
camp
|
21
|
+
network
|
22
|
+
county
|
23
|
+
street
|
24
|
+
city
|
25
|
+
alley
|
26
|
+
depot
|
27
|
+
valley
|
28
|
+
)
|
29
|
+
@mainSuffixArray = %w(
|
30
|
+
now
|
31
|
+
resources
|
32
|
+
tools
|
33
|
+
source
|
34
|
+
review
|
35
|
+
system
|
36
|
+
book
|
37
|
+
guide
|
38
|
+
talk
|
39
|
+
data
|
40
|
+
vision
|
41
|
+
load
|
42
|
+
box
|
43
|
+
focus
|
44
|
+
beat
|
45
|
+
voice
|
46
|
+
share
|
47
|
+
cafe
|
48
|
+
nexus
|
49
|
+
zone
|
50
|
+
sight
|
51
|
+
link
|
52
|
+
lab
|
53
|
+
insight
|
54
|
+
vine
|
55
|
+
board
|
56
|
+
flow
|
57
|
+
signs
|
58
|
+
network
|
59
|
+
wire
|
60
|
+
cast
|
61
|
+
ville
|
62
|
+
nation
|
63
|
+
egg
|
64
|
+
cove
|
65
|
+
news
|
66
|
+
today
|
67
|
+
future
|
68
|
+
fun
|
69
|
+
watch
|
70
|
+
story
|
71
|
+
fever
|
72
|
+
coast
|
73
|
+
side
|
74
|
+
road
|
75
|
+
heat
|
76
|
+
bite
|
77
|
+
insider
|
78
|
+
club
|
79
|
+
connect
|
80
|
+
)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
@statesArray = %w(
|
2
|
+
Alabama
|
3
|
+
Alaska
|
4
|
+
Arizona
|
5
|
+
Arkansas
|
6
|
+
California
|
7
|
+
Colorado
|
8
|
+
Connecticut
|
9
|
+
Delaware
|
10
|
+
Florida
|
11
|
+
Georgia
|
12
|
+
Hawaii
|
13
|
+
Idaho
|
14
|
+
Illinois Indiana
|
15
|
+
Iowa
|
16
|
+
Kansas
|
17
|
+
Kentucky
|
18
|
+
Louisiana
|
19
|
+
Maine
|
20
|
+
Maryland
|
21
|
+
Massachusetts
|
22
|
+
Michigan
|
23
|
+
Minnesota
|
24
|
+
Mississippi
|
25
|
+
Missouri
|
26
|
+
Montana Nebraska
|
27
|
+
Nevada
|
28
|
+
New Hampshire
|
29
|
+
New Jersey
|
30
|
+
New Mexico
|
31
|
+
New York
|
32
|
+
North Carolina
|
33
|
+
North Dakota
|
34
|
+
Ohio
|
35
|
+
Oklahoma
|
36
|
+
Oregon
|
37
|
+
Pennsylvania Rhode Island
|
38
|
+
South Carolina
|
39
|
+
South Dakota
|
40
|
+
Tennessee
|
41
|
+
Texas
|
42
|
+
Utah
|
43
|
+
Vermont
|
44
|
+
Virginia
|
45
|
+
Washington
|
46
|
+
West Virginia
|
47
|
+
Wisconsin
|
48
|
+
Wyoming
|
49
|
+
)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
##################################################################
|
2
|
+
# ####DomainBlob.rb -- quick domain-name lookup and idea generation
|
3
|
+
# ####created by Joe Norton
|
4
|
+
# ####http://norton.io
|
5
|
+
# #LICENSING: GNU GPLv3 License##################################
|
6
|
+
# ! usr/bin/ruby
|
7
|
+
module Domainblob
|
8
|
+
class Outputs
|
9
|
+
def initialize
|
10
|
+
end
|
11
|
+
def help?
|
12
|
+
puts "\n###Usage: ruby domainblob.rb phrase\n" \
|
13
|
+
"##Or, create 'totalPhraseList.txt' and add one phrase per line\n" \
|
14
|
+
'##Thanks, try again.'
|
15
|
+
end
|
16
|
+
|
17
|
+
def start_output(blobResults, thePhrase)
|
18
|
+
puts
|
19
|
+
puts '###Started!###'
|
20
|
+
puts 'Now analyzing domains with root: ' + thePhrase
|
21
|
+
puts 'Please wait while Domainblob processes this request...'
|
22
|
+
blobResults.puts
|
23
|
+
blobResults.puts 'Now analyzing domains with root: ' + thePhrase
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
def ending_output(timeDiff = 0, availNum = 0, whoiscounter = 0, httpcounter = 0, blobResults = false)
|
28
|
+
long_str = "\nProcess took: " + timeDiff.to_s + " seconds\n" +
|
29
|
+
availNum.to_s + " domains were AVAILABLE\n" +
|
30
|
+
(whoiscounter + httpcounter).to_s + " total domains were checked\n" \
|
31
|
+
'Direct Whois ' + whoiscounter.to_s + "\n" \
|
32
|
+
'HTTP Check ' + httpcounter.to_s
|
33
|
+
if blobResults
|
34
|
+
blobResults.puts long_str
|
35
|
+
else
|
36
|
+
puts long_str
|
37
|
+
end
|
38
|
+
true
|
39
|
+
end
|
40
|
+
|
41
|
+
def write_results(blobResults, avail)
|
42
|
+
if avail.nil?
|
43
|
+
blobResults.puts 'ZERO Available'
|
44
|
+
blobResults.puts '#######################'
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
blobResults.puts 'Available'
|
48
|
+
blobResults.puts '#######################'
|
49
|
+
for entry in avail
|
50
|
+
blobResults.puts entry
|
51
|
+
end
|
52
|
+
blobResults.puts
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
##################################################################
|
2
|
+
# ####DomainBlob.rb -- quick domain-name lookup and idea generation
|
3
|
+
# ####created by Joe Norton
|
4
|
+
# ####http://norton.io
|
5
|
+
# #LICENSING: GNU GPLv3 License##################################
|
6
|
+
# ! usr/bin/ruby
|
7
|
+
|
8
|
+
module Domainblob
|
9
|
+
class QuickCheck < DomainChecker
|
10
|
+
def initialize(q, options)
|
11
|
+
super
|
12
|
+
start(q)
|
13
|
+
end
|
14
|
+
|
15
|
+
def start(q)
|
16
|
+
w = Whois::Client.new
|
17
|
+
q.each do |domain|
|
18
|
+
domain_available?(w, domain)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
##################################################################
|
2
|
+
# ####DomainBlob.rb -- quick domain-name lookup and idea generation
|
3
|
+
# ####created by Joe Norton
|
4
|
+
# ####http://norton.io
|
5
|
+
# #LICENSING: GNU GPLv3 License##################################
|
6
|
+
# ! usr/bin/ruby
|
7
|
+
|
8
|
+
module Domainblob
|
9
|
+
class SeedGenerator < DomainChecker
|
10
|
+
def initialize(q, options)
|
11
|
+
super
|
12
|
+
@phrase_list_filename = q if options['phraselist']
|
13
|
+
load_prefixes_and_suffixes
|
14
|
+
if options['phraselist']
|
15
|
+
start(File.readlines(@pwd + '/' + @phrase_list_filename))
|
16
|
+
else
|
17
|
+
start(q)
|
18
|
+
end
|
19
|
+
finish
|
20
|
+
end
|
21
|
+
def start(q)
|
22
|
+
make_and_or_nav_to_dir(RESULT_DIR_NAME)
|
23
|
+
q.each do |seed_keyword|
|
24
|
+
#
|
25
|
+
seed_keyword = sanitize_input(seed_keyword)
|
26
|
+
#
|
27
|
+
@result_file = File.new(seed_keyword + RESULT_FILE_EXT, 'w+')
|
28
|
+
#
|
29
|
+
@o.start_output(@result_file, seed_keyword)
|
30
|
+
# first we check all possible combos for the root phrase
|
31
|
+
get_root_domains(seed_keyword)
|
32
|
+
# now we cycle through prefixes, then suffixes for this phrase
|
33
|
+
cycle_thru_all_prefix_and_suffix_lists(seed_keyword)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
def finish
|
37
|
+
avail_num = @avail.length
|
38
|
+
@avail = @avail.sort_by(&:length)
|
39
|
+
#
|
40
|
+
@o.write_results(@result_file, @avail)
|
41
|
+
#
|
42
|
+
stop_clock
|
43
|
+
#
|
44
|
+
@o.ending_output(@time_diff, avail_num, @whoiscounter, @httpcounter, @result_file)
|
45
|
+
@result_file.close
|
46
|
+
#
|
47
|
+
File.rename(
|
48
|
+
seed_keyword + RESULT_FILE_EXT,
|
49
|
+
seed_keyword + avail_num.to_s + RESULT_FILE_EXT
|
50
|
+
)
|
51
|
+
#
|
52
|
+
@o.ending_output(@time_diff, avail_num, @whoiscounter, @httpcounter)
|
53
|
+
Dir.chdir('..')
|
54
|
+
end
|
55
|
+
def load_prefixes_and_suffixes
|
56
|
+
Dir[File.join(File.dirname(__FILE__), 'lists', '*.rb')].each {|file| eval(File.read(file)) }
|
57
|
+
|
58
|
+
@prefix_array = [
|
59
|
+
@mainPrefixArray,
|
60
|
+
# @scientificPrefixArray,
|
61
|
+
@bothPreAndSuffixArray,
|
62
|
+
# (@latinPrefixArray + @latinPreAndSuffixArray)
|
63
|
+
]
|
64
|
+
|
65
|
+
@suffix_array = [
|
66
|
+
@mainSuffixArray,
|
67
|
+
@locationSuffixArray,
|
68
|
+
@bothPreAndSuffixArray,
|
69
|
+
#@latinPreAndSuffixArray
|
70
|
+
]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: domainblob
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Joe Norton
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: whois
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.14'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.14'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Check available domain names, in bulk!
|
84
|
+
email:
|
85
|
+
- joe@norton.io
|
86
|
+
executables:
|
87
|
+
- db
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- LICENSE
|
92
|
+
- README.md
|
93
|
+
- bin/db
|
94
|
+
- lib/domainblob.rb
|
95
|
+
- lib/domainblob/check_file.rb
|
96
|
+
- lib/domainblob/cli.rb
|
97
|
+
- lib/domainblob/domain_checker.rb
|
98
|
+
- lib/domainblob/lists/misc.rb
|
99
|
+
- lib/domainblob/lists/prefixes.rb
|
100
|
+
- lib/domainblob/lists/suffixes.rb
|
101
|
+
- lib/domainblob/lists/us_states.rb
|
102
|
+
- lib/domainblob/outputs.rb
|
103
|
+
- lib/domainblob/quick_check.rb
|
104
|
+
- lib/domainblob/seed_generator.rb
|
105
|
+
- lib/domainblob/version.rb
|
106
|
+
homepage: ''
|
107
|
+
licenses:
|
108
|
+
- MIT
|
109
|
+
metadata: {}
|
110
|
+
post_install_message:
|
111
|
+
rdoc_options: []
|
112
|
+
require_paths:
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 2.0.0
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 1.3.6
|
124
|
+
requirements: []
|
125
|
+
rubyforge_project: domainblob
|
126
|
+
rubygems_version: 2.3.0
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
129
|
+
summary: Bulk Domain Name Checker
|
130
|
+
test_files: []
|