Skip to content

Commit 5f97a8a

Browse files
committed
Fixed boundary IP cases. Fixed error with IPv6 address when using IPv4 BIN.
1 parent 347af0b commit 5f97a8a

File tree

2 files changed

+61
-7
lines changed

2 files changed

+61
-7
lines changed

ip2proxy.erl

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ getpackageversion() ->
5151
end.
5252

5353
getmoduleversion() ->
54-
"3.3.1".
54+
"3.3.2".
5555

5656
getdatabaseversion() ->
5757
case ets:info(mymeta) of
@@ -484,6 +484,7 @@ isproxy(Ip) ->
484484
query(Ip, Mode) ->
485485
X = "INVALID IP ADDRESS",
486486
Y = "INVALID BIN FILE",
487+
Z = "IPV6 MISSING IN IPV4 BIN",
487488
Fromv4mapped = 281470681743360,
488489
Tov4mapped = 281474976710655,
489490
From6to4 = 42545680458834377588178886921629466624,
@@ -521,18 +522,71 @@ query(Ip, Mode) ->
521522
Result = case inet:parse_address(Ip) of
522523
{ok, {X1, X2, X3, X4}} ->
523524
Ipnum = (X1 bsl 24) + (X2 bsl 16) + (X3 bsl 8) + (X4),
524-
search4(S, Ipnum, Databasetype, 0, Ipv4databasecount, Ipv4databaseaddr, Ipv4indexbaseaddr, Ipv4columnsize, Mode);
525+
if
526+
Ipnum == 4294967295 ->
527+
Ipnum2 = Ipnum - 1;
528+
true ->
529+
Ipnum2 = Ipnum
530+
end,
531+
search4(S, Ipnum2, Databasetype, 0, Ipv4databasecount, Ipv4databaseaddr, Ipv4indexbaseaddr, Ipv4columnsize, Mode);
525532
{ok, {X1, X2, X3, X4, X5, X6, X7, X8}} ->
526533
Ipnum = (X1 bsl 112) + (X2 bsl 96) + (X3 bsl 80) + (X4 bsl 64) + (X5 bsl 48) + (X6 bsl 32) + (X7 bsl 16) + X8,
527534
if
528535
Ipnum >= Fromv4mapped andalso Ipnum =< Tov4mapped ->
529-
search4(S, Ipnum - Fromv4mapped, Databasetype, 0, Ipv4databasecount, Ipv4databaseaddr, Ipv4indexbaseaddr, Ipv4columnsize, Mode);
536+
Ipnum2 = Ipnum - Fromv4mapped,
537+
if
538+
Ipnum2 == 4294967295 ->
539+
Ipnum3 = Ipnum2 - 1;
540+
true ->
541+
Ipnum3 = Ipnum2
542+
end,
543+
search4(S, Ipnum3, Databasetype, 0, Ipv4databasecount, Ipv4databaseaddr, Ipv4indexbaseaddr, Ipv4columnsize, Mode);
530544
Ipnum >= From6to4 andalso Ipnum =< To6to4 ->
531-
search4(S, (Ipnum bsr 80) band Last32bits, Databasetype, 0, Ipv4databasecount, Ipv4databaseaddr, Ipv4indexbaseaddr, Ipv4columnsize, Mode);
545+
Ipnum2 = (Ipnum bsr 80) band Last32bits,
546+
if
547+
Ipnum2 == 4294967295 ->
548+
Ipnum3 = Ipnum2 - 1;
549+
true ->
550+
Ipnum3 = Ipnum2
551+
end,
552+
search4(S, Ipnum3, Databasetype, 0, Ipv4databasecount, Ipv4databaseaddr, Ipv4indexbaseaddr, Ipv4columnsize, Mode);
532553
Ipnum >= Fromteredo andalso Ipnum =< Toteredo ->
533-
search4(S, ((bnot Ipnum) band Last32bits), Databasetype, 0, Ipv4databasecount, Ipv4databaseaddr, Ipv4indexbaseaddr, Ipv4columnsize, Mode);
554+
Ipnum2 = (bnot Ipnum) band Last32bits,
555+
if
556+
Ipnum2 == 4294967295 ->
557+
Ipnum3 = Ipnum2 - 1;
558+
true ->
559+
Ipnum3 = Ipnum2
560+
end,
561+
search4(S, Ipnum3, Databasetype, 0, Ipv4databasecount, Ipv4databaseaddr, Ipv4indexbaseaddr, Ipv4columnsize, Mode);
534562
true ->
535-
search6(S, Ipnum, Databasetype, 0, Ipv6databasecount, Ipv6databaseaddr, Ipv6indexbaseaddr, Ipv6columnsize, Mode)
563+
if
564+
Ipv6databasecount > 0 ->
565+
if
566+
Ipnum == 340282366920938463463374607431768211455 ->
567+
Ipnum2 = Ipnum - 1;
568+
true ->
569+
Ipnum2 = Ipnum
570+
end,
571+
search6(S, Ipnum2, Databasetype, 0, Ipv6databasecount, Ipv6databaseaddr, Ipv6indexbaseaddr, Ipv6columnsize, Mode);
572+
true ->
573+
#ip2proxyrecord{
574+
country_short = Z,
575+
country_long = Z,
576+
region = Z,
577+
city = Z,
578+
isp = Z,
579+
proxy_type = Z,
580+
domain = Z,
581+
usage_type = Z,
582+
asn = Z,
583+
as = Z,
584+
last_seen = Z,
585+
threat = Z,
586+
provider = Z,
587+
is_proxy = -1
588+
}
589+
end
536590
end;
537591
{_, _} ->
538592
#ip2proxyrecord{

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ defmodule IP2ProxyErlang.MixProject do
44
def project() do
55
[
66
app: :ip2proxy_erlang,
7-
version: "3.3.1",
7+
version: "3.3.2",
88
elixir: "~> 1.0",
99
build_embedded: Mix.env == :prod,
1010
start_permanent: Mix.env == :prod,

0 commit comments

Comments
 (0)