用Python访问读取纯真IP数据库的方法代码,pythonip,工作中我们常需要使用纯真
用Python访问读取纯真IP数据库的方法代码,pythonip,工作中我们常需要使用纯真
工作中我们常需要使用纯真IP数据库内的数据做分析,如何使用Python访问读取纯真IP数据库的方法有很多朋友需要。今天我自己写了个python代码,可以解决Python读取纯真IP数据库的需求,拿来和给大家借鉴一下。
我日常工作是用python版检索纯真IP数据库中的IP地址信息,以下代码大家可以自行修改再使用。
#!/usr/bin/python from struct import *import string def ip2string( ip ): a = (ip & 0xff000000) >> 24 b = (ip & 0x00ff0000) >> 16 c = (ip & 0x0000ff00) >> 8 d = ip & 0x000000ff return "%d.%d.%d.%d" % (a,b,c,d) def string2ip( str ): ss = string.split(str, '.'); ip = 0L for s in ss: ip = (ip << 8) + string.atoi(s) return ip; class IpLocater : def __init__( self, ipdb_file ): self.ipdb = open( ipdb_file, "rb" ) # get index address str = self.ipdb.read( 8 ) (self.first_index,self.last_index) = unpack('II',str) self.index_count = (self.last_index - self.first_index) / 7 + 1 def getString(self,offset = 0): if offset : self.ipdb.seek( offset ) str = "" ch = self.ipdb.read( 1 ) (byte,) = unpack('B',ch) while byte != 0: str = str + ch ch = self.ipdb.read( 1 ) (byte,) = unpack('B',ch) return str def getLong3(self,offset = 0): if offset : self.ipdb.seek( offset ) str = self.ipdb.read(3) (a,b) = unpack('HB',str) return (b << 16) + a def getAreaAddr(self,offset=0): if offset : self.ipdb.seek( offset ) str = self.ipdb.read( 1 ) (byte,) = unpack('B',str) if byte == 0x01 or byte == 0x02: p = self.getLong3() if p: return self.getString( p ) else:#www.iplaypy.com return "" else: return self.getString( offset ) def getAddr(self,offset ,ip = 0): self.ipdb.seek( offset + 4) countryAddr = "" areaAddr = "" str = self.ipdb.read( 1 ) (byte,) = unpack('B',str) if byte == 0x01: countryOffset = self.getLong3() self.ipdb.seek(countryOffset ) str = self.ipdb.read( 1 ) (b,) = unpack('B',str) if b == 0x02: countryAddr = self.getString( self.getLong3() ) self.ipdb.seek( countryOffset + 4 ) else: countryAddr = self.getString( countryOffset ) areaAddr = self.getAreaAddr() elif byte == 0x02: countryAddr = self.getString( self.getLong3() ) areaAddr = self.getAreaAddr( offset + 8 ) else: countryAddr = self.getString( offset + 4 ) areaAddr = self.getAreaAddr( ) return countryAddr + "/" + areaAddr def output(self, first ,last ): if last > self.index_count : last = self.index_count for index in range(first,last): offset = self.first_index + index * 7 self.ipdb.seek( offset ) buf = self.ipdb.read( 7 ) (ip,of1,of2) = unpack("IHB",buf) print "%s - %s" % (ip, self.getAddr( of1 + (of2 << 16) ) ) def find(self,ip,left,right): if right-left == 1: return left else: middle = ( left + right ) / 2 offset = self.first_index + middle * 7 self.ipdb.seek( offset ) buf = self.ipdb.read( 4 ) (new_ip,) = unpack("I",buf) if ip <= new_ip : return self.find( ip, left, middle ) else: return self.find( ip, middle, right ) def getIpAddr(self,ip): index = self.find( ip,0,self.index_count - 1 ) ioffset = self.first_index + index * 7 aoffset = self.getLong3( ioffset + 4) address = self.getAddr( aoffset ) return address if __name__ == "__main__" : ip_locater = IpLocater( "QQWry.Dat" ) ip_locater.output( 100, 120 ) ip = '59.64.234.174' ip = '58.38.139.229' address = ip_locater.getIpAddr( string2ip( ip ) ) print "the ip %s come from %s" % (ip,address)
Python访问读取纯真IP数据库的方法代码一文中,关于Python string模块的使用方法,请参见:Python string模块 字符串函数方法操作教程
编橙之家文章,
相关内容
- Python PycURL自动处理cookie的方法,pythonpycurl,本节要为大
- Python方法获取DLL和EXE文件版本号代码示例,pythondll,本文
- Python统计分析execl文件列表值的方法,pythonexecl,用Pyth
- Python获取web密码程序的脚本源代码,pythonweb,利用Pytho
- Python检测远端服务器端口是否通的脚本方法,python远端
- 用Python代码实现的RSS阅读器示例,pythonrss,编橙之家py
- Python方法将DBF文件导出到Excel代码示例,pythondbf,用Pyt
- Python Daemon守护进程的代码实例,python守护进程,编橙之
- Python清空文件夹及内容的方法源码,,编橙之家Python之家
- Python实现自动扫雷游戏的方法源码,python自动扫雷,编橙
评论关闭