nicinfo 0.2.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.
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
+