ip2location_ruby 8.3.2 → 8.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +18 -1
- data/VERSION +1 -1
- data/example.rb +42 -31
- data/ip2location_ruby.gemspec +2 -1
- data/lib/ip2location_ruby.rb +227 -3
- data/spec/ip2location_ruby_iptools_spec.rb +94 -0
- data/spec/ip2location_ruby_webservice_spec.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6b5f833dfd8e52321b11114f24103b44ff2cc9279360a71a0948ecb6742d2d1
|
4
|
+
data.tar.gz: 9f2b62167a00f19ac4f342d222291c108a3204b4c99324e9c21770339a73444d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59be638fbbba78173c4fc3ba9bc708d4a43b21024cf5e675135533bbc10093c6a6707a15e108646e0d546b130e59a63e355c9d2c2ace995b0bd59c51484c454d
|
7
|
+
data.tar.gz: 283ac65d80c92f7bd054eb82399217901b08da84b965fa6764002baa5773073f130689b0646217b98ff62ebacf672e6990787a5d287075750eb05b9518f3892f
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -56,7 +56,6 @@ Below is the description of the functions available in the **BIN Database** look
|
|
56
56
|
| get_addresstype | Returns the IP address type (A-Anycast, B-Broadcast, M-Multicast & U-Unicast) of IP address or domain name. |
|
57
57
|
| get_category | Returns the IAB content taxonomy category of IP address or domain name. |
|
58
58
|
|
59
|
-
|
60
59
|
## Web Service
|
61
60
|
Below is the description of the functions available in the **Web Service** lookup.
|
62
61
|
|
@@ -66,6 +65,24 @@ Below is the description of the functions available in the **Web Service** looku
|
|
66
65
|
| lookup | Return the IP information in array.<ul><li>country_code</li><li>country_name</li><li>region_name</li><li>city_name</li><li>latitude</li><li>longitude</li><li>zip_code</li><li>time_zone</li><li>isp</li><li>domain</li><li>net_speed</li><li>idd_code</li><li>area_code</li><li>weather_station_code</li><li>weather_station_name</li><li>mcc</li><li>mnc</li><li>mobile_brand</li><li>elevation</li><li>usage_type</li><li>address_type</li><li>category</li><li>continent<ul><li>name</li><li>code</li><li>hemisphere</li><li>translations</li></ul></li><li>country<ul><li>name</li><li>alpha3_code</li><li>numeric_code</li><li>demonym</li><li>flag</li><li>capital</li><li>total_area</li><li>population</li><li>currency<ul><li>code</li><li>name</li><li>symbol</li></ul></li><li>language<ul><li>code</li><li>name</li></ul></li><li>idd_code</li><li>tld</li><li>translations</li></ul></li><li>region<ul><li>name</li><li>code</li><li>translations</li></ul></li><li>city<ul><li>name</li><li>translations</li></ul></li><li>geotargeting<ul><li>metro</li></ul></li><li>country_groupings</li><li>time_zone_info<ul><li>olson</li><li>current_time</li><li>gmt_offset</li><li>is_dst</li><li>sunrise</li><li>sunset</li></ul></li><ul> |
|
67
66
|
| get_credit | Return remaining credit of the web service account. |
|
68
67
|
|
68
|
+
## IpTools
|
69
|
+
Below is the description of the functions available in the **IpTools** class.
|
70
|
+
|
71
|
+
| Function Name | Description |
|
72
|
+
|---|---|
|
73
|
+
| is_ipv4 | Return either true or false. Verify if a string is a valid IPv4 address. |
|
74
|
+
| is_ipv6 | Return either true or false. Verify if a string is a valid IPv6 address. |
|
75
|
+
| ipv4_to_decimal | Translate IPv4 address from dotted-decimal address to decimal format. Return null on error. |
|
76
|
+
| decimal_to_ipv4 | Translate IPv4 address from decimal number to dotted-decimal address. Return null on error. |
|
77
|
+
| ipv6_to_decimal | Translate IPv6 address from hexadecimal address to decimal format. Return null on error. |
|
78
|
+
| decimal_to_ipv6 | Translate IPv6 address from decimal number into hexadecimal address. Return null on error. |
|
79
|
+
| ipv4_to_cidr | Convert IPv4 range into a list of IPv4 CIDR notation. |
|
80
|
+
| cidr_to_ipv4 | Convert IPv4 CIDR notation into a list of IPv4 addresses. |
|
81
|
+
| ipv6_to_cidr | Convert IPv6 range into a list of IPv6 CIDR notation. |
|
82
|
+
| cidr_to_ipv6 | Convert IPv6 CIDR notation into a list of IPv6 addresses. |
|
83
|
+
| compress_ipv6 | Compress a IPv6 to shorten the length. |
|
84
|
+
| expand_ipv6 | Expand a shorten IPv6 to full length. |
|
85
|
+
|
69
86
|
# Dependencies
|
70
87
|
This library requires IP2Location BIN data file to function. You may download the BIN data file at
|
71
88
|
* IP2Location LITE BIN Data (Free): https://lite.ip2location.com
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
8.
|
1
|
+
8.4.0
|
data/example.rb
CHANGED
@@ -4,40 +4,51 @@ require 'ip2location_ruby'
|
|
4
4
|
i2l = Ip2location.new.open("./data/IP2LOCATION-LITE-DB1.IPV6.BIN")
|
5
5
|
record = i2l.get_all('8.8.8.8')
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
print 'Usage Type: ' + record['usagetype'] + "\n"
|
33
|
-
print 'Address Type: ' + record['addresstype'] + "\n"
|
34
|
-
print 'Category: ' + record['category'] + "\n"
|
7
|
+
puts 'Country Code: ' + record['country_short']
|
8
|
+
puts 'Country Name: ' + record['country_long']
|
9
|
+
puts 'Region Name: ' + record['region']
|
10
|
+
puts 'City Name: ' + record['city']
|
11
|
+
puts 'Latitude: '
|
12
|
+
puts record['latitude']
|
13
|
+
puts 'Longitude: '
|
14
|
+
puts record['longitude']
|
15
|
+
puts 'ISP: ' + record['isp']
|
16
|
+
puts 'Domain: ' + record['domain']
|
17
|
+
puts 'Net Speed: ' + record['netspeed']
|
18
|
+
puts 'Area Code: ' + record['areacode']
|
19
|
+
puts 'IDD Code: ' + record['iddcode']
|
20
|
+
puts 'Time Zone: ' + record['timezone']
|
21
|
+
puts 'ZIP Code: ' + record['zipcode']
|
22
|
+
puts 'Weather Station Code: ' + record['weatherstationname']
|
23
|
+
puts 'Weather Station Name: ' + record['weatherstationcode']
|
24
|
+
puts 'MCC: ' + record['mcc']
|
25
|
+
puts 'MNC: ' + record['mnc']
|
26
|
+
puts 'Mobile Name: ' + record['mobilebrand']
|
27
|
+
puts 'Elevation: '
|
28
|
+
puts record['elevation']
|
29
|
+
puts 'Usage Type: ' + record['usagetype']
|
30
|
+
puts 'Address Type: ' + record['addresstype']
|
31
|
+
puts 'Category: ' + record['category']
|
35
32
|
|
36
33
|
i2l.close()
|
37
34
|
|
38
35
|
# Web Service
|
39
36
|
ws = Ip2locationWebService.new('demo', 'WS25', true)
|
40
37
|
record = ws.lookup('8.8.8.8', 'continent,country,region,city,geotargeting,country_groupings,time_zone_info', 'en')
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
puts record
|
39
|
+
puts ws.get_credit()
|
40
|
+
|
41
|
+
# IP Tools
|
42
|
+
iptool = Ip2locationIpTools.new()
|
43
|
+
puts iptool.is_ipv4('8.8.8.8')
|
44
|
+
puts iptool.is_ipv6('2001:4860:4860::8888')
|
45
|
+
puts iptool.ipv4_to_decimal('8.8.8.8')
|
46
|
+
puts iptool.decimal_to_ipv4(134744072)
|
47
|
+
puts iptool.ipv6_to_decimal('2001:4860:4860::8888')
|
48
|
+
puts iptool.decimal_to_ipv6(42541956123769884636017138956568135816)
|
49
|
+
puts iptool.ipv4_to_cidr('8.0.0.0', '8.255.255.255')
|
50
|
+
puts iptool.cidr_to_ipv4('8.0.0.0/8')
|
51
|
+
puts iptool.ipv6_to_cidr('2002:0000:0000:1234:abcd:ffff:c0a8:0000', '2002:0000:0000:1234:ffff:ffff:ffff:ffff')
|
52
|
+
puts iptool.cidr_to_ipv6('2002::1234:abcd:ffff:c0a8:101/64')
|
53
|
+
puts iptool.compress_ipv6('2002:0000:0000:1234:ffff:ffff:ffff:ffff')
|
54
|
+
puts iptool.expand_ipv6('2002::1234:ffff:ffff:ffff:ffff')
|
data/ip2location_ruby.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "ip2location_ruby"
|
3
|
-
s.version = "8.
|
3
|
+
s.version = "8.4.0"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.require_paths = ["lib"]
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"lib/ip2location_ruby/ip2location_record.rb",
|
32
32
|
"spec/assets/IP2LOCATION-LITE-DB1.IPV6.BIN",
|
33
33
|
"spec/ip2location_ruby_database_spec.rb",
|
34
|
+
"spec/ip2location_ruby_iptools_spec.rb",
|
34
35
|
"spec/ip2location_ruby_webservice_spec.rb",
|
35
36
|
"spec/spec_helper.rb",
|
36
37
|
"rb/data/IP2LOCATION-LITE-DB1.IPV6.BIN"
|
data/lib/ip2location_ruby.rb
CHANGED
@@ -13,7 +13,7 @@ require 'ip2location_ruby/ip2location_record'
|
|
13
13
|
class Ip2location
|
14
14
|
attr_accessor :record_class4, :record_class6, :v4, :file, :db_index, :count, :base_addr, :ipno, :count, :record, :database, :columns, :ip_version, :ipv4databasecount, :ipv4databaseaddr, :ipv4indexbaseaddr, :ipv6databasecount, :ipv6databaseaddr, :ipv6indexbaseaddr, :databaseyear, :databasemonth, :databaseday, :last_err_msg
|
15
15
|
|
16
|
-
VERSION = '8.
|
16
|
+
VERSION = '8.4.0'
|
17
17
|
FIELD_NOT_SUPPORTED = 'NOT SUPPORTED'
|
18
18
|
INVALID_IP_ADDRESS = 'INVALID IP ADDRESS'
|
19
19
|
INVALID_BIN_DATABASE = 'Incorrect IP2Location BIN file format. Please make sure that you are using the latest IP2Location BIN file.'
|
@@ -651,7 +651,7 @@ class Ip2location
|
|
651
651
|
else
|
652
652
|
ipv = 6
|
653
653
|
ipnum = ip.to_i + 0
|
654
|
-
#reformat ipv4 address in ipv6
|
654
|
+
#reformat ipv4 address in ipv6
|
655
655
|
if ipnum >= 281470681743360 && ipnum <= 281474976710655
|
656
656
|
ipv = 4
|
657
657
|
ipnum = ipnum - 281470681743360
|
@@ -717,7 +717,7 @@ class Ip2locationWebService
|
|
717
717
|
if parsed_response.nil?
|
718
718
|
return false
|
719
719
|
end
|
720
|
-
if
|
720
|
+
if parsed_response["country_code"].nil?
|
721
721
|
raise Exception.new "Error: " + parsed_response["response"]
|
722
722
|
end
|
723
723
|
return parsed_response
|
@@ -738,4 +738,228 @@ class Ip2locationWebService
|
|
738
738
|
end
|
739
739
|
return parsed_response["response"]
|
740
740
|
end
|
741
|
+
end
|
742
|
+
|
743
|
+
class Ip2locationIpTools
|
744
|
+
def is_ipv4(ip)
|
745
|
+
if !(IPAddr.new(ip) rescue nil).nil?
|
746
|
+
if IPAddr.new(ip).ipv4?
|
747
|
+
return true
|
748
|
+
else
|
749
|
+
return false
|
750
|
+
end
|
751
|
+
else
|
752
|
+
return false
|
753
|
+
end
|
754
|
+
end
|
755
|
+
|
756
|
+
def is_ipv6(ip)
|
757
|
+
if !(IPAddr.new(ip) rescue nil).nil?
|
758
|
+
if IPAddr.new(ip).ipv6?
|
759
|
+
return true
|
760
|
+
else
|
761
|
+
return false
|
762
|
+
end
|
763
|
+
else
|
764
|
+
return false
|
765
|
+
end
|
766
|
+
end
|
767
|
+
|
768
|
+
def ipv4_to_decimal(ip)
|
769
|
+
if !(IPAddr.new(ip) rescue nil).nil?
|
770
|
+
ip = IPAddr.new(ip)
|
771
|
+
if ip.ipv4?
|
772
|
+
return ip.to_i
|
773
|
+
else
|
774
|
+
return
|
775
|
+
end
|
776
|
+
else
|
777
|
+
return
|
778
|
+
end
|
779
|
+
end
|
780
|
+
|
781
|
+
def decimal_to_ipv4(number)
|
782
|
+
if number.is_a? Numeric
|
783
|
+
return IPAddr.new(number, Socket::AF_INET).to_s
|
784
|
+
else
|
785
|
+
return
|
786
|
+
end
|
787
|
+
end
|
788
|
+
|
789
|
+
def ipv6_to_decimal(ip)
|
790
|
+
if !(IPAddr.new(ip) rescue nil).nil?
|
791
|
+
ip = IPAddr.new(ip)
|
792
|
+
if ip.ipv6?
|
793
|
+
return ip.to_i
|
794
|
+
else
|
795
|
+
return
|
796
|
+
end
|
797
|
+
else
|
798
|
+
return
|
799
|
+
end
|
800
|
+
end
|
801
|
+
|
802
|
+
def decimal_to_ipv6(number)
|
803
|
+
if number.is_a? Numeric
|
804
|
+
return IPAddr.new(number, Socket::AF_INET6).to_s
|
805
|
+
else
|
806
|
+
return
|
807
|
+
end
|
808
|
+
end
|
809
|
+
|
810
|
+
def ipv4_to_cidr(ipfrom, ipto)
|
811
|
+
if (!(IPAddr.new(ipfrom) rescue nil).nil?) and (!(IPAddr.new(ipto) rescue nil).nil?)
|
812
|
+
ipfrom = IPAddr.new(ipfrom)
|
813
|
+
ipto = IPAddr.new(ipto)
|
814
|
+
if ipfrom.ipv4? and ipto.ipv4?
|
815
|
+
ipfrom = ipfrom.to_i
|
816
|
+
ipto = ipto.to_i
|
817
|
+
result = []
|
818
|
+
while ipto >= ipfrom do
|
819
|
+
maxSize = 32
|
820
|
+
while maxSize > 0 do
|
821
|
+
mask = (2**32 - 2**(32-(maxSize - 1)))
|
822
|
+
maskBase = ipfrom & mask
|
823
|
+
if maskBase != ipfrom
|
824
|
+
break
|
825
|
+
end
|
826
|
+
maxSize-=1
|
827
|
+
end
|
828
|
+
x = Math.log(ipto - ipfrom + 1)/Math.log(2)
|
829
|
+
maxDiff = (32 - x.floor).floor
|
830
|
+
|
831
|
+
if maxSize < maxDiff
|
832
|
+
maxSize = maxDiff
|
833
|
+
end
|
834
|
+
|
835
|
+
ip = IPAddr.new(ipfrom, Socket::AF_INET).to_s
|
836
|
+
cidr = [ip, maxSize].join('/')
|
837
|
+
result.push cidr
|
838
|
+
ipfrom += 2**(32-maxSize)
|
839
|
+
end
|
840
|
+
return result
|
841
|
+
else
|
842
|
+
return
|
843
|
+
end
|
844
|
+
else
|
845
|
+
return
|
846
|
+
end
|
847
|
+
end
|
848
|
+
|
849
|
+
def cidr_to_ipv4(cidr)
|
850
|
+
if cidr.include? "/"
|
851
|
+
cidr = IPAddr.new(cidr)
|
852
|
+
arr_tmp = cidr.to_range.to_s.split('..')
|
853
|
+
ip_arr = {}
|
854
|
+
ip_arr['ip_start'] = arr_tmp[0]
|
855
|
+
ip_arr['ip_end'] = arr_tmp[1]
|
856
|
+
return ip_arr
|
857
|
+
else
|
858
|
+
return
|
859
|
+
end
|
860
|
+
end
|
861
|
+
|
862
|
+
def ipv6_to_cidr(ipfrom_ori, ipto)
|
863
|
+
if (!(IPAddr.new(ipfrom_ori) rescue nil).nil?) and (!(IPAddr.new(ipto) rescue nil).nil?)
|
864
|
+
ipfrom = IPAddr.new(ipfrom_ori)
|
865
|
+
ipto = IPAddr.new(ipto)
|
866
|
+
if ipfrom.ipv6? and ipto.ipv6?
|
867
|
+
ipfrom = '00' + ipfrom.to_i.to_s(2)
|
868
|
+
ipto = '00' + ipto.to_i.to_s(2)
|
869
|
+
result = []
|
870
|
+
if ipfrom == ipto
|
871
|
+
cidr = ipfrom_ori + '/128'
|
872
|
+
result.push cidr
|
873
|
+
return result
|
874
|
+
end
|
875
|
+
if ipfrom > ipto
|
876
|
+
ipfrom, ipto = ipto, ipfrom
|
877
|
+
end
|
878
|
+
networks = {}
|
879
|
+
network_size = 0
|
880
|
+
while ipto > ipfrom do
|
881
|
+
if ipfrom[-1, 1] == '1'
|
882
|
+
networks[ipfrom[network_size, (128 - network_size)] + ('0' * network_size)] = 128 - network_size
|
883
|
+
n = ipfrom.rindex('0')
|
884
|
+
ipfrom = ((n == 0) ? '' : ipfrom[0, n]) + '1' + ('0' * (128 - n - 1))
|
885
|
+
end
|
886
|
+
|
887
|
+
if ipto[-1, 1] == '0'
|
888
|
+
networks[ipto[network_size, (128 - network_size)] + ('0' * network_size)] = 128 - network_size
|
889
|
+
n = ipto.rindex('1')
|
890
|
+
ipto = ((n == 0) ? '' : ipto[0, n]) + '0' + ('1' * (128 - n - 1))
|
891
|
+
end
|
892
|
+
|
893
|
+
if ipfrom > ipto
|
894
|
+
next
|
895
|
+
end
|
896
|
+
|
897
|
+
shift = 128 - [ipfrom.rindex('0'), ipto.rindex('1')].max
|
898
|
+
ipfrom = ('0' * shift) + ipfrom[0, (128 - shift)]
|
899
|
+
ipto = ('0' * shift) + ipto[0, (128 - shift)]
|
900
|
+
network_size = network_size + shift
|
901
|
+
|
902
|
+
if ipfrom == ipto
|
903
|
+
networks[ipfrom[network_size, (128 - network_size)] + ('0' * network_size)] = 128 - network_size
|
904
|
+
next
|
905
|
+
end
|
906
|
+
end
|
907
|
+
|
908
|
+
networks.each do |ip, netmask|
|
909
|
+
result.push IPAddr.new(ip.to_i(2), Socket::AF_INET6).to_s + '/' + netmask.to_s
|
910
|
+
end
|
911
|
+
return result
|
912
|
+
else
|
913
|
+
return
|
914
|
+
end
|
915
|
+
else
|
916
|
+
return
|
917
|
+
end
|
918
|
+
end
|
919
|
+
|
920
|
+
def cidr_to_ipv6(cidr)
|
921
|
+
if cidr.include? "/"
|
922
|
+
ip_start = IPAddr.new(cidr.to_s.split('/').first).to_i.to_s(16).scan(/.{4}/)
|
923
|
+
ip_start = ip_start[0] + ':' + ip_start[1] + ':' + ip_start[2] + ':' + ip_start[3] + ':' + ip_start[4] + ':' + ip_start[5] + ':' + ip_start[6] + ':' + ip_start[7]
|
924
|
+
|
925
|
+
cidr_new = IPAddr.new(cidr)
|
926
|
+
arr_tmp = cidr_new.to_range.to_s.split('..')
|
927
|
+
ip_end = IPAddr.new(arr_tmp[1]).to_i.to_s(16).scan(/.{4}/)
|
928
|
+
ip_end = ip_end[0] + ':' + ip_end[1] + ':' + ip_end[2] + ':' + ip_end[3] + ':' + ip_end[4] + ':' + ip_end[5] + ':' + ip_end[6] + ':' + ip_end[7]
|
929
|
+
|
930
|
+
ip_arr = {}
|
931
|
+
ip_arr['ip_start'] = ip_start
|
932
|
+
ip_arr['ip_end'] = ip_end
|
933
|
+
return ip_arr
|
934
|
+
else
|
935
|
+
return
|
936
|
+
end
|
937
|
+
end
|
938
|
+
|
939
|
+
def compress_ipv6(ip)
|
940
|
+
if !(IPAddr.new(ip) rescue nil).nil?
|
941
|
+
ip = IPAddr.new(ip)
|
942
|
+
if ip.ipv6?
|
943
|
+
return ip
|
944
|
+
else
|
945
|
+
return
|
946
|
+
end
|
947
|
+
else
|
948
|
+
return
|
949
|
+
end
|
950
|
+
end
|
951
|
+
|
952
|
+
def expand_ipv6(ip)
|
953
|
+
if !(IPAddr.new(ip) rescue nil).nil?
|
954
|
+
ip = IPAddr.new(ip)
|
955
|
+
if ip.ipv6?
|
956
|
+
res = ip.to_i.to_s(16).scan(/.{4}/)
|
957
|
+
return res[0] + ':' + res[1] + ':' + res[2] + ':' + res[3] + ':' + res[4] + ':' + res[5] + ':' + res[6] + ':' + res[7]
|
958
|
+
else
|
959
|
+
return
|
960
|
+
end
|
961
|
+
else
|
962
|
+
return
|
963
|
+
end
|
964
|
+
end
|
741
965
|
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "Ip2location" do
|
4
|
+
it "work correctly with iptools is_ipv4" do
|
5
|
+
iptool = Ip2locationIpTools.new()
|
6
|
+
record = iptool.is_ipv4('8.8.8.8')
|
7
|
+
expect(record).to eq true
|
8
|
+
end
|
9
|
+
|
10
|
+
it "work correctly with iptools invalid is_ipv4" do
|
11
|
+
iptool = Ip2locationIpTools.new()
|
12
|
+
record = iptool.is_ipv4('8.8.8.555')
|
13
|
+
expect(record).to eq false
|
14
|
+
end
|
15
|
+
|
16
|
+
it "work correctly with iptools is_ipv6" do
|
17
|
+
iptool = Ip2locationIpTools.new()
|
18
|
+
record = iptool.is_ipv6('2001:4860:4860::8888')
|
19
|
+
expect(record).to eq true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "work correctly with iptools invalid is_ipv6" do
|
23
|
+
iptool = Ip2locationIpTools.new()
|
24
|
+
record = iptool.is_ipv6('2001:4860:4860::ZZZZ')
|
25
|
+
expect(record).to eq false
|
26
|
+
end
|
27
|
+
|
28
|
+
it "work correctly with iptools ipv4_to_decimal" do
|
29
|
+
iptool = Ip2locationIpTools.new()
|
30
|
+
record = iptool.ipv4_to_decimal('8.8.8.8')
|
31
|
+
expect(record).to eq 134744072
|
32
|
+
end
|
33
|
+
|
34
|
+
it "work correctly with iptools decimal_to_ipv4" do
|
35
|
+
iptool = Ip2locationIpTools.new()
|
36
|
+
record = iptool.decimal_to_ipv4(134744072)
|
37
|
+
expect(record).to eq '8.8.8.8'
|
38
|
+
end
|
39
|
+
|
40
|
+
it "work correctly with iptools ipv6_to_decimal" do
|
41
|
+
iptool = Ip2locationIpTools.new()
|
42
|
+
record = iptool.ipv6_to_decimal('2001:4860:4860::8888')
|
43
|
+
expect(record).to eq 42541956123769884636017138956568135816
|
44
|
+
end
|
45
|
+
|
46
|
+
it "work correctly with iptools decimal_to_ipv6" do
|
47
|
+
iptool = Ip2locationIpTools.new()
|
48
|
+
record = iptool.decimal_to_ipv6(42541956123769884636017138956568135816)
|
49
|
+
expect(record).to eq '2001:4860:4860::8888'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "work correctly with iptools ipv4_to_cidr" do
|
53
|
+
iptool = Ip2locationIpTools.new()
|
54
|
+
record = iptool.ipv4_to_cidr('8.0.0.0', '8.255.255.255')
|
55
|
+
expect(record).to eq ['8.0.0.0/8']
|
56
|
+
end
|
57
|
+
|
58
|
+
it "work correctly with iptools cidr_to_ipv4" do
|
59
|
+
iptool = Ip2locationIpTools.new()
|
60
|
+
record = iptool.cidr_to_ipv4('8.0.0.0/8')
|
61
|
+
expect(record).to include(
|
62
|
+
"ip_start"=>"8.0.0.0",
|
63
|
+
"ip_end"=>"8.255.255.255"
|
64
|
+
)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "work correctly with iptools ipv6_to_cidr" do
|
68
|
+
iptool = Ip2locationIpTools.new()
|
69
|
+
record = iptool.ipv6_to_cidr('2002:0000:0000:1234:abcd:ffff:c0a8:0000', '2002:0000:0000:1234:ffff:ffff:ffff:ffff')
|
70
|
+
expect(record).to eq ['2002::1234:abcd:ffff:c0a8:0/109','2002::1234:abcd:ffff:c0b0:0/108','2002::1234:abcd:ffff:c0c0:0/106','2002::1234:abcd:ffff:c100:0/104','2002::1234:abcd:ffff:c200:0/103','2002::1234:abcd:ffff:c400:0/102','2002::1234:abcd:ffff:c800:0/101','2002::1234:abcd:ffff:d000:0/100','2002::1234:abcd:ffff:e000:0/99','2002:0:0:1234:abce::/79','2002:0:0:1234:abd0::/76','2002:0:0:1234:abe0::/75','2002:0:0:1234:ac00::/70','2002:0:0:1234:b000::/68','2002:0:0:1234:c000::/66']
|
71
|
+
end
|
72
|
+
|
73
|
+
it "work correctly with iptools cidr_to_ipv6" do
|
74
|
+
iptool = Ip2locationIpTools.new()
|
75
|
+
record = iptool.cidr_to_ipv6('2002::1234:abcd:ffff:c0a8:101/64')
|
76
|
+
expect(record).to include(
|
77
|
+
"ip_start"=>"2002:0000:0000:1234:abcd:ffff:c0a8:0101",
|
78
|
+
"ip_end"=>"2002:0000:0000:1234:ffff:ffff:ffff:ffff"
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "work correctly with iptools compress_ipv6" do
|
83
|
+
iptool = Ip2locationIpTools.new()
|
84
|
+
record = iptool.compress_ipv6('2002:0000:0000:1234:ffff:ffff:ffff:ffff')
|
85
|
+
expect(record).to eq '2002::1234:ffff:ffff:ffff:ffff'
|
86
|
+
end
|
87
|
+
|
88
|
+
it "work correctly with iptools expand_ipv6" do
|
89
|
+
iptool = Ip2locationIpTools.new()
|
90
|
+
record = iptool.expand_ipv6('2002::1234:ffff:ffff:ffff:ffff')
|
91
|
+
expect(record).to eq '2002:0000:0000:1234:ffff:ffff:ffff:ffff'
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ip2location_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ip2location
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bindata
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- rb/data/IP2LOCATION-LITE-DB1.IPV6.BIN
|
98
98
|
- spec/assets/IP2LOCATION-LITE-DB1.IPV6.BIN
|
99
99
|
- spec/ip2location_ruby_database_spec.rb
|
100
|
+
- spec/ip2location_ruby_iptools_spec.rb
|
100
101
|
- spec/ip2location_ruby_webservice_spec.rb
|
101
102
|
- spec/spec_helper.rb
|
102
103
|
homepage: https://github.com/ip2location/ip2location-ruby
|
@@ -107,7 +108,7 @@ metadata:
|
|
107
108
|
documentation_uri: https://www.rubydoc.info/gems/ip2location_ruby
|
108
109
|
homepage_uri: https://www.ip2location.com
|
109
110
|
source_code_uri: https://github.com/ip2location/ip2location-ruby
|
110
|
-
post_install_message:
|
111
|
+
post_install_message:
|
111
112
|
rdoc_options: []
|
112
113
|
require_paths:
|
113
114
|
- lib
|
@@ -122,9 +123,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
123
|
- !ruby/object:Gem::Version
|
123
124
|
version: '0'
|
124
125
|
requirements: []
|
125
|
-
|
126
|
-
|
127
|
-
signing_key:
|
126
|
+
rubygems_version: 3.2.33
|
127
|
+
signing_key:
|
128
128
|
specification_version: 4
|
129
129
|
summary: the ip2location ruby library
|
130
130
|
test_files: []
|