@@ -51,7 +51,7 @@ getpackageversion() ->
5151 end .
5252
5353getmoduleversion () ->
54- " 3.3.1 " .
54+ " 3.3.2 " .
5555
5656getdatabaseversion () ->
5757 case ets :info (mymeta ) of
@@ -484,6 +484,7 @@ isproxy(Ip) ->
484484query (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 {
0 commit comments