- 豆豆staR
-
所以本文着重介绍如何快速使用perl生成mmdb文件,以及查询mmdb基本原理
工作环境:Centos 6.5
分别表示 IP/掩码|产品线|机架|管理员|机房 (纯属虚构)
我们所常见的ipv4地址如1.1.1.1均是点分十进制描述,以便用户来书写记忆,操作系统需要对该地址进行转义生成32位2进制地址,如上面的地址1.1.1.1将转换为00000001 00000001 00000001 00000001
MMDB文件内容为二进制格式,其内容分为三大块:搜索树、数据段和元数据
为了便于读者理解,我在此先介绍元数据
1.元数据区
(本文仅介绍对文件结构有影响的元数据,其他描述性质的元数据不在此讨论,有需要的读者请参考文尾的官方文档)2.搜索树
3.数据段
我们以1.1.1.1这个ip地址为例:
附:
MaxMind官方文档: http://maxmind.github.io/MaxMind-DB/若想支持查询内网IP需要修改MMDB生成脚本的pm文件
./MaxMind-DB-Writer-perl/lib/MaxMind/DB/Writer/Tree.pm
删除307行左右关于内网保留IP的内容下文为一个二进制索引的例子:
查询1.1.1.1加粗字体为路径0000000: 00000000 00000000 00000001 00000000 00000000 00101111 ...../
0000006: 00000000 00000000 00000010 00000000 00000000 00100011 .....#
000000c: 00000000 00000000 00000011 00000000 00000000 10011111 ......
0000012: 00000000 00000000 00000100 00000000 00000000 10011111 ......
0000018: 00000000 00000000 00000101 00000000 00000000 00100000 .....
000001e: 00000000 00000000 00000110 00000000 00000000 10011111 ......
0000024: 00000000 00000000 00000111 00000000 00000000 10011111 ......
000002a: 00000000 00000000 10011111 00000000 00000000 00001000 ......
0000030: 00000000 00000000 00001001 00000000 00000000 10011111 ......
0000036: 00000000 00000000 00001010 00000000 00000000 10011111 ......
000003c: 00000000 00000000 00001011 00000000 00000000 10011111 ......
0000042: 00000000 00000000 00001100 00000000 00000000 10011111 ......
0000048: 00000000 00000000 00001101 00000000 00000000 10011111 ......
000004e: 00000000 00000000 00001110 00000000 00000000 10011111 ......
0000054: 00000000 00000000 00001111 00000000 00000000 10011111 ......
000005a: 00000000 00000000 10011111 00000000 00000000 00010000 ......
0000060: 00000000 00000000 00010001 00000000 00000000 10011111 ......
0000066: 00000000 00000000 00010010 00000000 00000000 10011111 ......
000006c: 00000000 00000000 00010011 00000000 00000000 10011111 ......
0000072: 00000000 00000000 00010100 00000000 00000000 10011111 ......
0000078: 00000000 00000000 00010101 00000000 00000000 10011111 ......
000007e: 00000000 00000000 00010110 00000000 00000000 10011111 ......
0000084: 00000000 00000000 00010111 00000000 00000000 10011111 ......
000008a: 00000000 00000000 10011111 00000000 00000000 00011000 ......
0000090: 00000000 00000000 00011001 00000000 00000000 10011111 ......
0000096: 00000000 00000000 00011010 00000000 00000000 10011111 ......
000009c: 00000000 00000000 00011011 00000000 00000000 10011111 ......
00000a2: 00000000 00000000 00011100 00000000 00000000 10011111 ......
00000a8: 00000000 00000000 00011101 00000000 00000000 10011111 ......
00000ae: 00000000 00000000 00011110 00000000 00000000 10011111 ......
00000b4: 00000000 00000000 00011111 00000000 00000000 10011111 ......
00000ba: 00000000 00000000 10011111 00000000 00000000 10101111 ......
00000c0: 00000000 00000000 00100001 00000000 00000000 10011111 ..!...
00000c6: 00000000 00000000 10011111 00000000 00000000 00100010 ....."
00000cc: 00000000 00000000 10011111 00000000 00000000 10011111 ......
00000d2: 00000000 00000000 10011111 00000000 00000000 00100100 .....$
00000d8: 00000000 00000000 00100101 00000000 00000000 00101011 ..%..+
00000de: 00000000 00000000 00100110 00000000 00000000 10011111 ..&...
00000e4: 00000000 00000000 10011111 00000000 00000000 00100111 ....."
00000ea: 00000000 00000000 00101000 00000000 00000000 10011111 ..(...
00000f0: 00000000 00000000 00101001 00000000 00000000 10011111 ..)...
00000f6: 00000000 00000000 00101010 00000000 00000000 10011111 ..*...
00000fc: 00000000 00000000 10011111 00000000 00000000 10011111 ......
0000102: 00000000 00000000 10011111 00000000 00000000 00101100 .....,
0000108: 00000000 00000000 10011111 00000000 00000000 00101101 .....-
000010e: 00000000 00000000 10011111 00000000 00000000 00101110 ......
0000114: 00000000 00000000 10011111 00000000 00000000 10011111 ......
000011a: 00000000 00000000 00110000 00000000 00000000 01000100 ..0..D
0000120: 00000000 00000000 10011111 00000000 00000000 00110001 .....1
0000126: 00000000 00000000 00110010 00000000 00000000 10011111 ..2...
000012c: 00000000 00000000 10011111 00000000 00000000 00110011 .....3
0000132: 00000000 00000000 00110100 00000000 00000000 00111110 ..4..>
0000138: 00000000 00000000 00110101 00000000 00000000 10011111 ..5...
000013e: 00000000 00000000 10011111 00000000 00000000 00110110 .....6
0000144: 00000000 00000000 10011111 00000000 00000000 00110111 .....7
000014a: 00000000 00000000 10011111 00000000 00000000 00111000 .....8
0000150: 00000000 00000000 10011111 00000000 00000000 00111001 .....9
0000156: 00000000 00000000 10011111 00000000 00000000 00111010 .....:
000015c: 00000000 00000000 10011111 00000000 00000000 00111011 .....;
0000162: 00000000 00000000 10011111 00000000 00000000 00111100 .....<
0000168: 00000000 00000000 10011111 00000000 00000000 00111101 .....=
000016e: 00000000 00000000 10011111 00000000 00000000 10011111 ......
0000174: 00000000 00000000 00111111 00000000 00000000 10011111 ..?...
000017a: 00000000 00000000 01000000 00000000 00000000 10011111 ..@...
0000180: 00000000 00000000 01000001 00000000 00000000 10011111 ..A...
0000186: 00000000 00000000 01000010 00000000 00000000 10011111 ..B...
000018c: 00000000 00000000 01000011 00000000 00000000 10011111 ..C...
0000192: 00000000 00000000 10011111 00000000 00000000 10011111 ......
0000198: 00000000 00000000 01000101 00000000 00000000 10011110 ..E...
000019e: 00000000 00000000 01000110 00000000 00000000 10011111 ..F...
00001a4: 00000000 00000000 01000111 00000000 00000000 10001011 ..G...
00001aa: 00000000 00000000 01001000 00000000 00000000 01110101 ..H..u
00001b0: 00000000 00000000 01001001 00000000 00000000 10011111 ..I...
00001b6: 00000000 00000000 01001010 00000000 00000000 10011111 ..J...
00001bc: 00000000 00000000 01001011 00000000 00000000 01101110 ..K..n
00001c2: 00000000 00000000 01001100 00000000 00000000 01100000 ..L..`
00001c8: 00000000 00000000 01001101 00000000 00000000 10011111 ..M...
00001ce: 00000000 00000000 01001110 00000000 00000000 10011111 ..N...
00001d4: 00000000 00000000 01001111 00000000 00000000 10011111 ..O...
00001da: 00000000 00000000 01010000 00000000 00000000 10011111 ..P...
00001e0: 00000000 00000000 01010001 00000000 00000000 10011111 ..Q...
00001e6: 00000000 00000000 01010010 00000000 00000000 10011111 ..R...
00001ec: 00000000 00000000 01010011 00000000 00000000 10011111 ..S...
00001f2: 00000000 00000000 01010100 00000000 00000000 10011111 ..T...
00001f8: 00000000 00000000 01010101 00000000 00000000 10011111 ..U...
00001fe: 00000000 00000000 01010110 00000000 00000000 10011111 ..V...
0000204: 00000000 00000000 01010111 00000000 00000000 10011111 ..W...
000020a: 00000000 00000000 01011000 00000000 00000000 10011111 ..X...
0000210: 00000000 00000000 01011001 00000000 00000000 01011111 ..Y.._
0000216: 00000000 00000000 01011010 00000000 00000000 10011111 ..Z...
000021c: 00000000 00000000 01011011 00000000 00000000 10011111 ..[...
0000222: 00000000 00000000 01011100 00000000 00000000 10011111 .....
0000228: 00000000 00000000 01011101 00000000 00000000 10011111 ..]...
000022e: 00000000 00000000 01011110 00000000 00000000 10011111 ..^...
0000234: 00000000 00000000 10011111 00000000 00000000 10011111 ......
000023a: 00000000 00000000 10011111 00000000 00000000 10011111 ......
0000240: 00000000 00000000 01100001 00000000 00000000 10011111 ..a...
0000246: 00000000 00000000 10011111 00000000 00000000 01100010 .....b
000024c: 00000000 00000000 10011111 00000000 00000000 01100011 .....c
0000252: 00000000 00000000 01100100 00000000 00000000 10011111 ..d...
0000258: 00000000 00000000 01100101 00000000 00000000 10011111 ..e...
000025e: 00000000 00000000 01100110 00000000 00000000 10011111 ..f...
0000264: 00000000 00000000 01100111 00000000 00000000 10011111 ..g...
000026a: 00000000 00000000 10011111 00000000 00000000 01101000 .....h
0000270: 00000000 00000000 10011111 00000000 00000000 01101001 .....i
0000276: 00000000 00000000 01101010 00000000 00000000 10011111 ..j...
000027c: 00000000 00000000 01101011 00000000 00000000 10011111 ..k...
0000282: 00000000 00000000 01101100 00000000 00000000 10011111 ..l...
0000288: 00000000 00000000 10011111 00000000 00000000 01101101 .....m
000028e: 00000000 00000000 10011111 00000000 00000000 10011111 ......
0000294: 00000000 00000000 01101111 00000000 00000000 10011111 ..o...
000029a: 00000000 00000000 10011111 00000000 00000000 01110000 .....p
00002a0: 00000000 00000000 01110001 00000000 00000000 10011111 ..q...
00002a6: 00000000 00000000 10011111 00000000 00000000 01110010 .....r
00002ac: 00000000 00000000 01110011 00000000 00000000 10011111 ..s...
00002b2: 00000000 00000000 01110100 00000000 00000000 10011111 ..t...
00002b8: 00000000 00000000 10011111 00000000 00000000 10011111 ......
00002be: 00000000 00000000 10011111 00000000 00000000 01110110 .....v
00002c4: 00000000 00000000 01110111 00000000 00000000 10011111 ..w...
00002ca: 00000000 00000000 01111000 00000000 00000000 10011111 ..x...
00002d0: 00000000 00000000 01111001 00000000 00000000 10011111 ..y...
00002d6: 00000000 00000000 01111010 00000000 00000000 01111110 ..z..~
00002dc: 00000000 00000000 10011111 00000000 00000000 01111011 .....{
00002e2: 00000000 00000000 01111100 00000000 00000000 10011111 ..|...
00002e8: 00000000 00000000 01111101 00000000 00000000 10011111 ..}...
00002ee: 00000000 00000000 10011111 00000000 00000000 10011111 ......
00002f4: 00000000 00000000 10011111 00000000 00000000 01111111 ......
00002fa: 00000000 00000000 10000000 00000000 00000000 10011111 ......
0000300: 00000000 00000000 10000001 00000000 00000000 10011111 ......
0000306: 00000000 00000000 10011111 00000000 00000000 10000010 ......
000030c: 00000000 00000000 10011111 00000000 00000000 10000011 ......
0000312: 00000000 00000000 10000100 00000000 00000000 10011111 ......
0000318: 00000000 00000000 10011111 00000000 00000000 10000101 ......
000031e: 00000000 00000000 10011111 00000000 00000000 10000110 ......
0000324: 00000000 00000000 10000111 00000000 00000000 10011111 ......
000032a: 00000000 00000000 10001000 00000000 00000000 10011111 ......
0000330: 00000000 00000000 10011111 00000000 00000000 10001001 ......
0000336: 00000000 00000000 10001010 00000000 00000000 10011111 ......
000033c: 00000000 00000000 10011111 00000000 00000000 10011111 ......
0000342: 00000000 00000000 10001100 00000000 00000000 10011111 ......
0000348: 00000000 00000000 10011111 00000000 00000000 10001101 ......
000034e: 00000000 00000000 10011111 00000000 00000000 10001110 ......
0000354: 00000000 00000000 10001111 00000000 00000000 10011111 ......
000035a: 00000000 00000000 10010000 00000000 00000000 10011111 ......
0000360: 00000000 00000000 10010001 00000000 00000000 10011111 ......
0000366: 00000000 00000000 10010010 00000000 00000000 10011111 ......
000036c: 00000000 00000000 10010011 00000000 00000000 10011111 ......
0000372: 00000000 00000000 10010100 00000000 00000000 10011111 ......
0000378: 00000000 00000000 10010101 00000000 00000000 10011111 ......
000037e: 00000000 00000000 10010110 00000000 00000000 10011111 ......
0000384: 00000000 00000000 10010111 00000000 00000000 10011111 ......
000038a: 00000000 00000000 10011111 00000000 00000000 10011000 ......
0000390: 00000000 00000000 10011111 00000000 00000000 10011001 ......
0000396: 00000000 00000000 10011111 00000000 00000000 10011010 ......
000039c: 00000000 00000000 10011011 00000000 00000000 10011111 ......
00003a2: 00000000 00000000 10011100 00000000 00000000 10011111 ......
00003a8: 00000000 00000000 10011101 00000000 00000000 10011111 ......
00003ae: 00000000 00000000 10011111 00000000 00000000 10011111 ......
00003b4: 00000000 00000000 10011111 00000000 00000000 10011111 ......
00003ba: 00000000 00000000 00000000 00000000 00000000 00000000 ......
00003c0: 00000000 00000000 00000000 00000000 000