解析纯真ip数据库
#! /usr/bin/env python
# -*- coding: cp936 -*-
""" IPLocator: locate IP in the QQWry.dat.
Usage:
python IPLocator.py <ip>
Create and test with Python 2.2.3.
spadger@bmy <echo.xjtu@gmail.com> 2008-2-19
"""
import socket,string,struct,sys,os
os.chdir(sys.path[0])
class IPLocator :
def __init__( self, ipdbFile ):
self.ipdb = open( ipdbFile, "rb" )
str = self.ipdb.read( 8 )
(self.firstIndex,self.lastIndex) = struct.unpack('II',str)
self.indexCount = (self.lastIndex - self.firstIndex)/7+1
print self.getVersion()," 纪录总数: %d 条 "%(self.indexCount)
def getVersion(self):
s = self.getIpAddr(0xffffff00L)
return s
def getAreaAddr(self,offset=0):
if offset :
self.ipdb.seek( offset )
str = self.ipdb.read( 1 )
(byte,) = struct.unpack('B',str)
if byte == 0x01 or byte == 0x02:
p = self.getLong3()
if p:
return self.getString( p )
else:
return ""
else:
self.ipdb.seek(-1,1)
return self.getString( offset )
def getAddr(self,offset,ip=0):
self.ipdb.seek( offset + 4)
countryAddr = ""
areaAddr = ""
str = self.ipdb.read( 1 )
(byte,) = struct.unpack('B',str)
if byte == 0x01:
countryOffset = self.getLong3()
self.ipdb.seek( countryOffset )
str = self.ipdb.read( 1 )
(b,) = struct.unpack('B',str)