@@ -4,7 +4,7 @@ var bigInt = require("big-integer");
44
55var fd ;
66
7- var version = "2.0 .0" ;
7+ var version = "2.1 .0" ;
88var binfile = "" ;
99var IPv4ColumnSize = 0 ;
1010var IPv6ColumnSize = 0 ;
@@ -52,6 +52,11 @@ var lastseen_enabled = 0;
5252
5353var MAX_IPV4_RANGE = bigInt ( 4294967295 ) ;
5454var MAX_IPV6_RANGE = bigInt ( "340282366920938463463374607431768211455" ) ;
55+ var FROM_6TO4 = bigInt ( "42545680458834377588178886921629466624" ) ;
56+ var TO_6TO4 = bigInt ( "42550872755692912415807417417958686719" ) ;
57+ var FROM_TEREDO = bigInt ( "42540488161975842760550356425300246528" ) ;
58+ var TO_TEREDO = bigInt ( "42540488241204005274814694018844196863" ) ;
59+ var LAST_32BITS = bigInt ( "4294967295" ) ;
5560
5661var mydb = {
5762 "_DBType" : 0 ,
@@ -352,9 +357,28 @@ function proxyquery_data(myIP, iptype, data, mode) {
352357 _ColumnSize = IPv6ColumnSize ;
353358 ipnum = ip2no ( myIP ) ;
354359
355- indexaddr = ipnum . shiftRight ( 112 ) . toJSNumber ( ) ;
356- low = IndexArrayIPv6 [ indexaddr ] [ 0 ] ;
357- high = IndexArrayIPv6 [ indexaddr ] [ 1 ] ;
360+ if ( ( ipnum . geq ( FROM_6TO4 ) && ipnum . leq ( TO_6TO4 ) ) || ( ipnum . geq ( FROM_TEREDO ) && ipnum . leq ( TO_TEREDO ) ) ) {
361+ iptype = 4 ;
362+ MAX_IP_RANGE = MAX_IPV4_RANGE ;
363+ high = mydb . _DBCount ;
364+ _BaseAddr = mydb . _BaseAddr ;
365+ _ColumnSize = IPv4ColumnSize ;
366+
367+ if ( ipnum . geq ( FROM_6TO4 ) && ipnum . leq ( TO_6TO4 ) ) {
368+ ipnum = ipnum . shiftRight ( 80 ) . and ( LAST_32BITS ) . toJSNumber ( ) ;
369+ }
370+ else {
371+ ipnum = ipnum . not ( ) . and ( LAST_32BITS ) . toJSNumber ( ) ;
372+ }
373+ indexaddr = ipnum >>> 16 ;
374+ low = IndexArrayIPv4 [ indexaddr ] [ 0 ] ;
375+ high = IndexArrayIPv4 [ indexaddr ] [ 1 ] ;
376+ }
377+ else {
378+ indexaddr = ipnum . shiftRight ( 112 ) . toJSNumber ( ) ;
379+ low = IndexArrayIPv6 [ indexaddr ] [ 0 ] ;
380+ high = IndexArrayIPv6 [ indexaddr ] [ 1 ] ;
381+ }
358382 }
359383
360384 data . IP = myIP ;
0 commit comments