network_scanner 0.0.1 → 0.0.2
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 +4 -4
- data/bin/network_scanner +10 -2
- data/lib/network_scanner/version.rb +1 -1
- data/lib/network_scanner.rb +49 -24
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 523886c0cc9e935ee6629722850bf2aac37a2a94
|
4
|
+
data.tar.gz: a249a6aba70f6c99e6ac6ebb67e6a905f84c9afb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26091157cbe2b73b7faf985f049f8fe96d3dbe712a4ee487d59eb9a933d60459b6afa12b252c5c30ae8d56c868e6d73cd6d5a815be86f3fd093aeb16cb524af1
|
7
|
+
data.tar.gz: 618b76d95a7e2558ab2c8a80cc7fccc6457410b5670753320d8c495c703d5e306a7531233f135089cc40bbea8b4bf50a637885412e9ad1283aeb313f655f8b78
|
data/bin/network_scanner
CHANGED
@@ -5,7 +5,7 @@ require 'optparse'
|
|
5
5
|
|
6
6
|
options = {}
|
7
7
|
OptionParser.new do |opts|
|
8
|
-
opts.on('--cache FILE', String, 'Caches the IPs on the network in FILE') do |file|
|
8
|
+
opts.on('--cache FILE', String, 'Caches the IPs up on the network in FILE for quicker scanning') do |file|
|
9
9
|
options[:cache] = file
|
10
10
|
end
|
11
11
|
|
@@ -13,6 +13,10 @@ OptionParser.new do |opts|
|
|
13
13
|
options[:interface] = interface
|
14
14
|
end
|
15
15
|
|
16
|
+
opts.on('--range RANGE', String, 'Specify a range to scan(192.168.1.100-192.168.1.200)') do |range|
|
17
|
+
options[:range] = range
|
18
|
+
end
|
19
|
+
|
16
20
|
opts.on('--portscan PORT', Integer, 'Port to scan for') do |port|
|
17
21
|
options[:port] = port
|
18
22
|
end
|
@@ -38,7 +42,11 @@ if options[:pool]
|
|
38
42
|
end
|
39
43
|
|
40
44
|
if options[:interface]
|
41
|
-
network_scanner.
|
45
|
+
network_scanner.get_interface_ips(options[:interface])
|
46
|
+
end
|
47
|
+
|
48
|
+
if options[:range]
|
49
|
+
network_scanner.get_range_ips(options[:range])
|
42
50
|
end
|
43
51
|
|
44
52
|
if options[:cache]
|
data/lib/network_scanner.rb
CHANGED
@@ -17,7 +17,7 @@ end
|
|
17
17
|
|
18
18
|
module NetworkScanner
|
19
19
|
class << self
|
20
|
-
#
|
20
|
+
# Prevents the user from having to deal with namespacing. This is probably hacky
|
21
21
|
def new(*args)
|
22
22
|
Scanner.new(*args)
|
23
23
|
end
|
@@ -30,7 +30,7 @@ module NetworkScanner
|
|
30
30
|
@pool_size = 100
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def get_interface_ips(interface)
|
34
34
|
ifconfig = `ifconfig`.split("\n\n").index_by{|x| x[/\w+/,0]}
|
35
35
|
inet = ifconfig[interface][/inet addr:([^\s]*)/, 1].split('.')
|
36
36
|
broadcast = ifconfig[interface][/Bcast:([^\s]*)/, 1].split('.')
|
@@ -45,27 +45,59 @@ module NetworkScanner
|
|
45
45
|
second_range = start_second..broadcast[1].to_i
|
46
46
|
third_range = start_third..broadcast[2].to_i
|
47
47
|
fourth_range = start_fourth..broadcast[3].to_i
|
48
|
+
|
49
|
+
@ips_to_check = []
|
48
50
|
|
49
|
-
|
51
|
+
first_range.each do |first|
|
52
|
+
second_range.each do |second|
|
53
|
+
third_range.each do |third|
|
54
|
+
fourth_range.each do |fourth|
|
55
|
+
@ips_to_check << "#{first}.#{second}.#{third}.#{fourth}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
50
60
|
|
51
|
-
|
61
|
+
puts "Checking ips in (#{first_range}).(#{second_range}).(#{third_range}).(#{fourth_range})"
|
62
|
+
@ips = @ips_to_check
|
63
|
+
return @ips_to_check
|
64
|
+
end
|
52
65
|
|
53
|
-
|
66
|
+
def get_range_ips(range)
|
67
|
+
start, finish = range.split('-', 2).map{|ip| ip.split('.')}
|
68
|
+
first_range = start[0]..finish[0]
|
69
|
+
second_range = start[1]..finish[1]
|
70
|
+
third_range = start[2]..finish[2]
|
71
|
+
fourth_range = start[3]..finish[3]
|
72
|
+
|
73
|
+
@ips_to_check = []
|
54
74
|
|
55
75
|
first_range.each do |first|
|
56
76
|
second_range.each do |second|
|
57
77
|
third_range.each do |third|
|
58
78
|
fourth_range.each do |fourth|
|
59
|
-
ips_to_check << "#{first}.#{second}.#{third}.#{fourth}"
|
79
|
+
@ips_to_check << "#{first}.#{second}.#{third}.#{fourth}"
|
60
80
|
end
|
61
81
|
end
|
62
82
|
end
|
63
83
|
end
|
64
84
|
|
65
|
-
puts "Checking
|
66
|
-
|
85
|
+
puts "Checking ips in (#{first_range}).(#{second_range}).(#{third_range}).(#{fourth_range})"
|
86
|
+
@ips = @ips_to_check
|
87
|
+
return @ips_to_check
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_ips
|
91
|
+
raise Exception.new("Must specify an interface to get ips to check") unless @ips_to_check
|
92
|
+
|
93
|
+
@ips = []
|
94
|
+
|
95
|
+
pool = Thread.pool(@pool_size)
|
96
|
+
|
97
|
+
@ips_to_check.each do |ip|
|
67
98
|
pool.process do
|
68
|
-
|
99
|
+
# For some reason &> isn't working, so pipe stdout and then stderr
|
100
|
+
@ips << ip if system("ping -c 1 #{ip} >> /dev/null 2> /dev/null")
|
69
101
|
end
|
70
102
|
end
|
71
103
|
|
@@ -85,32 +117,25 @@ module NetworkScanner
|
|
85
117
|
end
|
86
118
|
|
87
119
|
def check_ports(port)
|
88
|
-
|
120
|
+
raise Exception.new("Must scan ips first (Specify an interface or cacheread)") unless @ips
|
89
121
|
|
90
122
|
puts "Checking for ports out of a total of #{@ips.length} ips"
|
91
123
|
|
92
|
-
|
93
|
-
queue << ip
|
94
|
-
end
|
95
|
-
|
96
|
-
pool = Thread.pool(200)
|
124
|
+
pool = Thread.pool(@pool_size)
|
97
125
|
|
98
|
-
|
126
|
+
@ips.each do |ip|
|
99
127
|
pool.process do
|
100
|
-
|
101
|
-
ip = queue.pop
|
102
|
-
puts ip if port_open?(ip, port)
|
103
|
-
end
|
128
|
+
puts ip if port_open?(ip, port)
|
104
129
|
end
|
105
130
|
end
|
106
131
|
|
107
|
-
pool.shutdown
|
132
|
+
pool.shutdown
|
108
133
|
end
|
109
134
|
|
110
135
|
def cache(file)
|
111
|
-
|
112
|
-
|
113
|
-
|
136
|
+
raise Exception.new("Must scan ips first (Specify an interface or cacheread)") unless @ips
|
137
|
+
get_ips
|
138
|
+
|
114
139
|
File.open(file, 'w'){|f| f.puts(JSON.pretty_generate(@ips))}
|
115
140
|
end
|
116
141
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: network_scanner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Neyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|