iptoasn 0.5.0 → 0.6.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 +4 -4
- data/README.md +73 -0
- data/lib/iptoasn.rb +3 -0
- data/lib/main.rb +29 -4
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7d28863be637ca0ad4c3b7b7ac648828fb963f3fed53bc237e695c83876737f
|
4
|
+
data.tar.gz: ac59b82846fcacd8e5d584ca7d10804dfe9097cd43d889bd53339c503686c011
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bfdd00ff5e6d10bea42810af1861de3bcaf0eafebf933788ccac9b0056a5974bc9e457bd5cc3077b6b4d0952f9a46ed758512891beaa59c7fcec977a42f2ca1
|
7
|
+
data.tar.gz: b0f0ad77ee6e089c3dfa0143523f8829ddf5fe25d3c38063fc383038a9a1350c8de00847925e3cff7a2c2c9439e797f93ac021bbb67f1904d10f5c62dbd1f7d7
|
data/README.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# iptoasn
|
2
|
+
|
3
|
+
`iptoasn` is a Ruby gem that provides a simple way to query Autonomous System (AS) information for a given IP address using the [iptoasn.com](https://iptoasn.com) dataset. This gem directly contains the iptoasn dataset broken up into chunks; at build time an index is created so individual chunks can be lazy loaded.
|
4
|
+
|
5
|
+
## Features
|
6
|
+
|
7
|
+
- Query AS information by IP address.
|
8
|
+
- Efficient lazy loading to minimize memory usage.
|
9
|
+
- Compatible with IPv4 addresses.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Add this line to your application's Gemfile:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'iptoasn'
|
17
|
+
```
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
```bash
|
22
|
+
bundle install
|
23
|
+
```
|
24
|
+
|
25
|
+
Or install it yourself as:
|
26
|
+
|
27
|
+
```bash
|
28
|
+
gem install iptoasn
|
29
|
+
```
|
30
|
+
|
31
|
+
## Usage
|
32
|
+
|
33
|
+
Here is a basic example of how to use the `iptoasn` gem:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
require 'iptoasn'
|
37
|
+
|
38
|
+
finder = IpToAsn.new
|
39
|
+
ip_address = ARGV[0]
|
40
|
+
|
41
|
+
response = finder.lookup(ip_address)
|
42
|
+
if response.nil?
|
43
|
+
puts "Couldn't locate #{ip_address}!"
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
|
47
|
+
puts "#{ip_address} is in #{response[:country_code]} and belongs to #{response[:as_name]}"
|
48
|
+
```
|
49
|
+
|
50
|
+
## Building
|
51
|
+
|
52
|
+
```shell
|
53
|
+
$ make fetch # grab the latest copy of the dataset
|
54
|
+
$ make process # break it up into chunks
|
55
|
+
$ make index # build indexes
|
56
|
+
$ make clean # clean up
|
57
|
+
```
|
58
|
+
|
59
|
+
## Dataset
|
60
|
+
|
61
|
+
The gem wraps the [iptoasn.com](https://iptoasn.com) dataset, which contains information about:
|
62
|
+
- IP address ranges (start and end IPs)
|
63
|
+
- Autonomous System Numbers (ASNs)
|
64
|
+
- Country codes
|
65
|
+
- Autonomous System names
|
66
|
+
|
67
|
+
## License
|
68
|
+
|
69
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
70
|
+
|
71
|
+
## Acknowledgments
|
72
|
+
|
73
|
+
This gem utilizes the [iptoasn.com](https://iptoasn.com) dataset. Special thanks to them for providing this valuable resource.
|
data/lib/iptoasn.rb
ADDED
data/lib/main.rb
CHANGED
@@ -1,14 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'ipaddr'
|
2
|
-
require_relative 'index
|
4
|
+
require_relative 'index'
|
3
5
|
|
4
6
|
class IpToAsn
|
5
7
|
def initialize
|
6
8
|
@index = chunk_index
|
7
9
|
@cache = {}
|
8
|
-
@chunk_dir =
|
10
|
+
@chunk_dir = './chunks'
|
11
|
+
@reserved_ranges = {
|
12
|
+
IPAddr.new('10.0.0.0/8') => 'RFC1918 Private',
|
13
|
+
IPAddr.new('172.16.0.0/12') => 'RFC1918 Private',
|
14
|
+
IPAddr.new('192.168.0.0/16') => 'RFC1918 Private',
|
15
|
+
IPAddr.new('0.0.0.0/8') => 'Current Network',
|
16
|
+
IPAddr.new('127.0.0.0/8') => 'Loopback',
|
17
|
+
IPAddr.new('169.254.0.0/16') => 'Link Local'
|
18
|
+
}
|
9
19
|
end
|
10
20
|
|
11
|
-
def lookup(ip_str)
|
21
|
+
def lookup(ip_str) # rubocop:disable Metrics/AbcSize
|
22
|
+
reserved_range_name = find_range(
|
23
|
+
ranges: @reserved_ranges,
|
24
|
+
ip_address: ip_str
|
25
|
+
)
|
26
|
+
|
27
|
+
return { as_number: 0, country_code: 'XX', as_name: reserved_range_name } unless reserved_range_name.nil?
|
28
|
+
|
12
29
|
chunk_name = binary_search(@index, ip_str).first
|
13
30
|
return nil if chunk_name.nil?
|
14
31
|
|
@@ -18,11 +35,19 @@ class IpToAsn
|
|
18
35
|
end
|
19
36
|
|
20
37
|
result = binary_search(@cache[chunk_name], ip_str)
|
21
|
-
nil if result.empty?
|
38
|
+
return nil if result.empty?
|
22
39
|
|
23
40
|
{ as_number: result[0], country_code: result[1], as_name: result[2] }
|
24
41
|
end
|
25
42
|
|
43
|
+
private
|
44
|
+
|
45
|
+
def find_range(ranges:, ip_address:)
|
46
|
+
ranges.filter_map do |k, v|
|
47
|
+
v if k.include? ip_address
|
48
|
+
end.first
|
49
|
+
end
|
50
|
+
|
26
51
|
def binary_search(ranges, ip_str)
|
27
52
|
ip_int = IPAddr.new(ip_str).to_i
|
28
53
|
low = 0
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iptoasn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OMAR
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This gem wraps the IP to ASN dataset. It uses lazy loading so it doesn't
|
14
14
|
load the entire ~25M dataset all at once.
|
@@ -17,6 +17,7 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
+
- README.md
|
20
21
|
- lib/chunks/chunk_aa.rb
|
21
22
|
- lib/chunks/chunk_ab.rb
|
22
23
|
- lib/chunks/chunk_ac.rb
|
@@ -42,6 +43,7 @@ files:
|
|
42
43
|
- lib/chunks/chunk_aw.rb
|
43
44
|
- lib/chunks/chunk_ax.rb
|
44
45
|
- lib/index.rb
|
46
|
+
- lib/iptoasn.rb
|
45
47
|
- lib/main.rb
|
46
48
|
homepage: https://github.com/ancat/iptoasn
|
47
49
|
licenses:
|