nicinfo 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/bin/nicinfo +22 -0
  3. data/lib/autnum.rb +90 -0
  4. data/lib/bootstrap.rb +198 -0
  5. data/lib/bsfiles/asn.json +2326 -0
  6. data/lib/bsfiles/dns.json +25 -0
  7. data/lib/bsfiles/entity.json +52 -0
  8. data/lib/bsfiles/ipv4.json +244 -0
  9. data/lib/bsfiles/ipv6.json +97 -0
  10. data/lib/cache.rb +141 -0
  11. data/lib/common_json.rb +263 -0
  12. data/lib/common_names.rb +49 -0
  13. data/lib/config.rb +260 -0
  14. data/lib/constants.rb +113 -0
  15. data/lib/data_tree.rb +205 -0
  16. data/lib/demo/autnum.json +228 -0
  17. data/lib/demo/domain-dnr.json +695 -0
  18. data/lib/demo/domain-rir.json +569 -0
  19. data/lib/demo/domains.json +625 -0
  20. data/lib/demo/entities.json +545 -0
  21. data/lib/demo/entity-dnr.json +143 -0
  22. data/lib/demo/entity-rir.json +394 -0
  23. data/lib/demo/error-code.json +31 -0
  24. data/lib/demo/help.json +58 -0
  25. data/lib/demo/ip.json +306 -0
  26. data/lib/demo/nameservers.json +434 -0
  27. data/lib/demo/ns-simple.json +210 -0
  28. data/lib/demo/ns-very-simple.json +41 -0
  29. data/lib/demo/ns.json +63 -0
  30. data/lib/demo/simple-ip.json +41 -0
  31. data/lib/demo/simple.json +13 -0
  32. data/lib/domain.rb +203 -0
  33. data/lib/ds_data.rb +70 -0
  34. data/lib/entity.rb +372 -0
  35. data/lib/enum.rb +47 -0
  36. data/lib/error_code.rb +56 -0
  37. data/lib/female-first-names.txt +4275 -0
  38. data/lib/ip.rb +86 -0
  39. data/lib/key_data.rb +70 -0
  40. data/lib/last-names.txt +88799 -0
  41. data/lib/male-first-names.txt +1219 -0
  42. data/lib/nicinfo_logger.rb +370 -0
  43. data/lib/nicinfo_main.rb +1013 -0
  44. data/lib/notices.rb +110 -0
  45. data/lib/ns.rb +108 -0
  46. data/lib/utils.rb +189 -0
  47. metadata +90 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bf8b32197f9344ad3fe596d47a9bd8a67e32bce8
4
+ data.tar.gz: 21b7cc75e7564169af3ffa3a65f60753f700e86c
5
+ SHA512:
6
+ metadata.gz: 65dd577a181178730402f1b0dedb341314697a9dd9ccb9531dabe750a9b549294d45f844fe33151eda49b55cec792df52287bce6eb93d6444042365e5590b6ce
7
+ data.tar.gz: 15af917a05057ec21fc49be01563861c1b3319150b5972a527b740fb99633326cf7406cdb73c8ad099aa717435243eae8bfe89213afeb8de63dafb50b79b9443
data/bin/nicinfo ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright (c) 2011,2012,2013 American Registry for Internet Numbers
3
+ #
4
+ # Permission to use, copy, modify, and/or distribute this software for any
5
+ # purpose with or without fee is hereby granted, provided that the above
6
+ # copyright notice and this permission notice appear in all copies.
7
+ #
8
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11
+ # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13
+ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
14
+ # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
+
16
+ $LOAD_PATH << File.join( File.dirname( File.expand_path(File.dirname(__FILE__) ) ), 'lib' )
17
+
18
+ require 'nicinfo_main'
19
+ app = NicInfo::Main.new( ARGV )
20
+ app.run()
21
+
22
+
data/lib/autnum.rb ADDED
@@ -0,0 +1,90 @@
1
+ # Copyright (C) 2011,2012,2013,2014 American Registry for Internet Numbers
2
+ #
3
+ # Permission to use, copy, modify, and/or distribute this software for any
4
+ # purpose with or without fee is hereby granted, provided that the above
5
+ # copyright notice and this permission notice appear in all copies.
6
+ #
7
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
13
+ # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+
15
+ require 'config'
16
+ require 'nicinfo_logger'
17
+ require 'utils'
18
+ require 'common_json'
19
+ require 'entity'
20
+ require 'data_tree'
21
+
22
+ module NicInfo
23
+
24
+ def NicInfo.display_autnum json_data, config, data_tree
25
+ autnum = Autnum.new( config ).process( json_data )
26
+ NicInfo::display_object_with_entities( autnum, config, data_tree )
27
+ end
28
+
29
+ # deals with RDAP autonomous number structures
30
+ class Autnum
31
+
32
+ attr_accessor :entities, :objectclass, :asEventActors
33
+
34
+ def initialize config
35
+ @config = config
36
+ @common = CommonJson.new config
37
+ @entities = Array.new
38
+ @asEventActors = Array.new
39
+ end
40
+
41
+ def process json_data
42
+ @objectclass = json_data
43
+ @entities = @common.process_entities @objectclass
44
+ return self
45
+ end
46
+
47
+ def display
48
+ @config.logger.start_data_item
49
+ @config.logger.data_title "[ AS NUMBER ]"
50
+ @config.logger.terse "Handle", NicInfo::get_handle( @objectclass )
51
+ @config.logger.extra "Object Class Name", NicInfo::get_object_class_name( @objectclass )
52
+ endNum = NicInfo.get_endAutnum @objectclass
53
+ startNum = NicInfo.get_startAutnum @objectclass
54
+ if endNum
55
+ @config.logger.terse "Start AS Number", startNum
56
+ @config.logger.terse "End AS Number", endNum
57
+ else
58
+ @config.logger.terse "AS Number", startNum
59
+ end
60
+ @config.logger.extra "Name", NicInfo.get_name( @objectclass )
61
+ @config.logger.terse "Country", NicInfo.get_country( @objectclass )
62
+ @config.logger.datum "Type", NicInfo.get_type( @objectclass )
63
+ @common.display_status @objectclass
64
+ @common.display_events @objectclass
65
+ @common.display_as_events_actors @asEventActors
66
+ @common.display_remarks @objectclass
67
+ @common.display_links( get_cn, @objectclass )
68
+ @config.logger.end_data_item
69
+ end
70
+
71
+ def get_cn
72
+ handle = NicInfo::get_handle @objectclass
73
+ if !handle
74
+ startNum = NicInfo.get_startAutnum @objectclass
75
+ handle = startNum if startNum
76
+ endNum = NicInfo.get_endAutnum @objectclass
77
+ handle << " - " if startNum and endNum
78
+ handle << endNum if endNum
79
+ end
80
+ return handle if handle
81
+ return "(unidentifiable autonomous system number #{object_id})"
82
+ end
83
+
84
+ def to_node
85
+ DataNode.new( get_cn, nil, NicInfo::get_self_link( NicInfo::get_links( @objectclass, @config ) ) )
86
+ end
87
+
88
+ end
89
+
90
+ end
data/lib/bootstrap.rb ADDED
@@ -0,0 +1,198 @@
1
+ # Copyright (C) 2013,2014 American Registry for Internet Numbers
2
+ #
3
+ # Permission to use, copy, modify, and/or distribute this software for any
4
+ # purpose with or without fee is hereby granted, provided that the above
5
+ # copyright notice and this permission notice appear in all copies.
6
+ #
7
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
13
+ # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
+
15
+ require 'rexml/document'
16
+ require 'constants'
17
+ require 'ipaddr'
18
+ require 'json'
19
+
20
+ module NicInfo
21
+
22
+ class Bootstrap
23
+
24
+ def initialize config
25
+ @config = config
26
+ end
27
+
28
+
29
+ def find_url_by_ip addr
30
+ retval = nil
31
+ if ! addr.instance_of? IPAddr
32
+ addr = IPAddr.new addr
33
+ end
34
+ file = File.join( @config.rdap_bootstrap_dir , NicInfo::IPV6_BOOTSTRAP ) if addr.ipv6?
35
+ file = File.join( @config.rdap_bootstrap_dir , NicInfo::IPV4_BOOTSTRAP ) if addr.ipv4?
36
+ data = JSON.parse( File.read( file ) )
37
+ services = get_services data
38
+ services.each do |service|
39
+ service[ 0 ].each do |service_entry|
40
+ if addr.ipv6?
41
+ prefix = IPAddr.new( service_entry )
42
+ else
43
+ entry = service_entry.split( "/" )[0].to_i.to_s + ".0.0.0"
44
+ prefix = IPAddr.new( entry )
45
+ prefix = prefix.mask( 8 )
46
+ end
47
+ if prefix.include?( addr )
48
+ retval = get_service_url( service[ 1 ] )
49
+ break
50
+ end
51
+ end
52
+ end if services
53
+ retval = @config.config[ NicInfo::BOOTSTRAP ][ NicInfo::IP_ROOT_URL ] if retval == nil
54
+ return retval
55
+ end
56
+
57
+ def find_url_by_as as
58
+ if as.instance_of? String
59
+ as = as.sub( /^AS/i, '')
60
+ as = as.to_i
61
+ end
62
+ retval = nil
63
+ file = File.join( @config.rdap_bootstrap_dir , NicInfo::ASN_BOOTSTRAP )
64
+ data = JSON.parse( File.read( file ) )
65
+ services = get_services data
66
+ services.each do |service|
67
+ service[ 0 ].each do |service_entry|
68
+ numbers = service_entry.split( "-" )
69
+ min = numbers[ 0 ].to_i
70
+ max = numbers[ -1 ].to_i
71
+ if (as >= min ) && (as <= max)
72
+ retval = get_service_url( service[ 1 ] )
73
+ break
74
+ end
75
+ end
76
+ end if services
77
+ retval = @config.config[ NicInfo::BOOTSTRAP ][ NicInfo::AS_ROOT_URL ] if retval == nil
78
+ return retval
79
+ end
80
+
81
+ def get_ip4_by_inaddr inaddr
82
+ inaddr = inaddr.sub( /\.in\-addr\.arpa\.?/, "")
83
+ a = inaddr.split( "." ).reverse
84
+ ip = Array.new( 4 ).fill( 0 )
85
+ for i in 0..a.length-1 do
86
+ ip[ i ] = a[ i ].to_i
87
+ end
88
+ return IPAddr.new( ip.join( "." ) )
89
+ end
90
+
91
+ def get_ip6_by_inaddr inaddr
92
+ inaddr = inaddr.sub( /\.ip6\.arpa\.?/, "")
93
+ a = inaddr.split( "." ).reverse.join
94
+ ip = Array.new( 16 ).fill( 0 )
95
+ i = 0
96
+ while i <= a.length-1 do
97
+ ip[ i/2 ] = ( a[ i..i+1 ].to_i(16) )
98
+ i = i +2
99
+ end
100
+ ipstr = ""
101
+ i = 0
102
+ while i <= ip.length-1 do
103
+ ipstr << ("%02X" % ip[i])
104
+ if ((i+1) % 2) == 0
105
+ ipstr << ":" if i != ip.length-1
106
+ end
107
+ i = i +1
108
+ end
109
+ return IPAddr.new( ipstr )
110
+ end
111
+
112
+ def find_url_by_domain domain
113
+ retval = nil
114
+ domain = domain.sub( /\.$/, '' ) #remove trailing dot if there is one
115
+ if domain.end_with?( ".ip6.arpa" )
116
+ addr = get_ip6_by_inaddr domain
117
+ retval = find_url_by_ip addr
118
+ elsif domain.end_with?( ".in-addr.arpa" )
119
+ addr = get_ip4_by_inaddr domain
120
+ retval = find_url_by_ip addr
121
+ else
122
+ retval = find_url_by_forward_domain domain
123
+ end
124
+ return retval
125
+ end
126
+
127
+ def find_url_by_forward_domain domain
128
+ retval = nil
129
+ file = File.join( @config.rdap_bootstrap_dir , NicInfo::DNS_BOOTSTRAP )
130
+ data = JSON.parse( File.read( file ) )
131
+ longest_domain = nil
132
+ longest_urls = nil
133
+ services = get_services data
134
+ services.each do |service|
135
+ service[ 0 ].each do |service_entry|
136
+ if domain.end_with?( service_entry )
137
+ if longest_domain == nil || longest_domain.length < service_entry.length
138
+ longest_domain = service_entry
139
+ longest_urls = service[ 1 ]
140
+ end
141
+ end
142
+ end
143
+ end if services
144
+ if longest_urls != nil
145
+ retval = get_service_url( longest_urls )
146
+ end
147
+ retval = @config.config[ NicInfo::BOOTSTRAP ][ NicInfo::DOMAIN_ROOT_URL ] if retval == nil
148
+ return retval
149
+ end
150
+
151
+ def find_url_by_entity entity_name
152
+ retval = nil
153
+ suffix = entity_name.downcase.split( '-' ).last
154
+ if suffix
155
+ file = File.join( @config.rdap_bootstrap_dir , NicInfo::ENTITY_BOOTSTRAP )
156
+ data = JSON.parse( File.read( file ) )
157
+ services = get_services data
158
+ services.each do |service|
159
+ service[ 0 ].each do |service_entry|
160
+ if service_entry.downcase == suffix
161
+ retval = get_service_url( service[ 1 ] )
162
+ break
163
+ end
164
+ end
165
+ end if services
166
+ end
167
+ retval = @config.config[ NicInfo::BOOTSTRAP ][ NicInfo::ENTITY_ROOT_URL ] if retval == nil
168
+ return retval
169
+ end
170
+
171
+ def get_services data
172
+ rdap_bootstrap = data["rdap_bootstrap"]
173
+ if rdap_bootstrap
174
+ rdap_bootstrap["services"]
175
+ end
176
+ end
177
+
178
+ def get_service_url service_url_array
179
+ http_url = nil
180
+ https_url = nil
181
+ service_url_array.each do |url|
182
+ if url.start_with?( "https" )
183
+ https_url = url
184
+ elsif url.start_with?( "http" )
185
+ http_url = url
186
+ end
187
+ end
188
+ if https_url != nil
189
+ return https_url
190
+ end
191
+ #else
192
+ return http_url
193
+ end
194
+
195
+ end
196
+
197
+ end
198
+