domainblob 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|