iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python读取纯真IP数据库
  • 234
分享到

Python读取纯真IP数据库

纯真数据库Python 2023-01-31 07:01:43 234人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、获取最新版IP地址数据库qqwry.dat    纯真IP地址数据库下载地址:Http://update.cz88.net/soft/setup.zip    在windows机器上下载解压,点击setup.exe安装,在安装目录下的q

一、获取最新版IP地址数据库qqwry.dat

    纯真IP地址数据库下载地址:Http://update.cz88.net/soft/setup.zip

    在windows机器上下载解压,点击setup.exe安装,在安装目录下的qqwry.dat即是最新版ip数据库

    也可从51CTO下载(不是最新版,可用于测试):http://down.51cto.com/data/1888530

二、IPLocator.py

    网上找到别人用python写的纯真IP数据库的查询程序,原文地址:http://blog.chinaunix.net/uid-20758462-id-1876988.html,本文对代码做了一些修改,解决中文乱码问题。

    建立IPLocator.py文件(见本文附件),内容如下:

#! /usr/bin/env Python
# -*- coding: utf-8 -*-
""" IPLocator: locate IP in the QQWry.dat.
    Usage:
        python IPLocator.py <ip>
"""

import Socket,string,struct,sys

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)
            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 dump(self, first ,last ):
        if last > self.indexCount :
            last = self.indexCount
        for index in range(first,last):
            offset = self.firstIndex + index * 7
            self.ipdb.seek( offset )
            buf = self.ipdb.read( 7 )
            (ip,of1,of2) = struct.unpack("IHB",buf)
            address = self.getAddr( of1 + (of2 << 16) )
            #把GBK转为utf-8
            address = unicode(address,'gbk').encode("utf-8")
            print "%d\t%s\t%s" %(index, self.ip2str(ip), \
                address )

    def setIpRange(self,index):
        offset = self.firstIndex + index * 7
        self.ipdb.seek( offset )
        buf = self.ipdb.read( 7 )
        (self.curStartIp,of1,of2) = struct.unpack("IHB",buf)
        self.curEndIpOffset = of1 + (of2 << 16)
        self.ipdb.seek( self.curEndIpOffset )
        buf = self.ipdb.read( 4 )
        (self.curEndIp,) = struct.unpack("I",buf)

    def getIpAddr(self,ip):
        L = 0
        R = self.indexCount - 1
        while L < R-1:
            M = (L + R) / 2
            self.setIpRange(M)
            if ip == self.curStartIp:
                L = M
                break
            if ip > self.curStartIp:
                L = M
            else:
                R = M
        self.setIpRange( L )
        #version infORMation,255.255.255.X,urgy but useful
        if ip&0xffffff00L == 0xffffff00L:
            self.setIpRange( R )
        if self.curStartIp <= ip <= self.curEndIp:
            address = self.getAddr( self.curEndIpOffset )
            #把GBK转为utf-8
            address = unicode(address,'gbk').encode("utf-8")
        else:
            address = "未找到该IP的地址"
        return address

    def getIpRange(self,ip):
        self.getIpAddr(ip)
        range = self.ip2str(self.curStartIp) + ' - ' \
            + self.ip2str(self.curEndIp)
        return range

    def getString(self,offset = 0):
        if offset :
            self.ipdb.seek( offset )
        str = ""
        ch = self.ipdb.read( 1 )
        (byte,) = struct.unpack('B',ch)
        while byte != 0:
            str = str + ch
            ch = self.ipdb.read( 1 )
            (byte,) = struct.unpack('B',ch)
        return str

    def ip2str(self,ip):
        return str(ip>>24)+'.'+str((ip>>16)&0xffL)+'.' \
            +str((ip>>8)&0xffL)+'.'+str(ip&0xffL)

    def str2ip(self,s):
        (ip,) = struct.unpack('I',socket.inet_aton(s))
        return ((ip>>24)&0xffL)|((ip&0xffL)<<24) \
            |((ip>>8)&0xff00L)|((ip&0xff00L)<<8)

    def getLong3(self,offset = 0):
        if offset :
            self.ipdb.seek( offset )
        str = self.ipdb.read(3)
        (a,b) = struct.unpack('HB',str)
        return (b << 16) + a

#Demo
def main():
    IPL = IPLocator( "qqwry.dat" )
    ip = ""
    if len(sys.argv) != 2:
        print 'Usage: python IPLocator.py <IP>'
        return
    else:
        ip = sys.argv[1]
    address = IPL.getIpAddr( IPL.str2ip(ip) )
    range = IPL.getIpRange( IPL.str2ip(ip) )
    print "此IP %s 属于 %s\n所在网段: %s" % (ip,address, range)


if __name__ == "__main__" :
    main()

    把qqwry.dat放到和IPLocator.py同一目录,使用方法如下(请参考IPLocator.py中的Demo):

wKiom1SKxheTBaiIAAOTHHV72tE754.jpg


--结束END--

本文标题: Python读取纯真IP数据库

本文链接: https://www.lsjlt.com/news/191171.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python读取纯真IP数据库
    一、获取最新版IP地址数据库qqwry.dat    纯真IP地址数据库下载地址:http://update.cz88.net/soft/setup.zip    在windows机器上下载解压,点击setup.exe安装,在安装目录下的q...
    99+
    2023-01-31
    纯真 数据库 Python
  • python3通过纯真IP数据库查询IP
    在网上看到的别人写的python2的代码,修改成了python3。 把纯真IP数据库文件qqwry.dat放到czip.py同一目录下。 1 #! /usr/bin/env python 2 # -*- coding: utf-...
    99+
    2023-01-31
    数据库查询 纯真 IP
  • Python实现一个转存纯真IP数据库的脚本分享
    前言 之前写过很多关于扫描脚本的文章,一直都没写自己的扫描IP段是哪里搞来的,也会有朋友经常来问一些扫描经验,说实话我觉得这个工具并没有实际的技术含量,但是能提高工作效率,就共享出来给大家耍耍~ 谈到扫描经...
    99+
    2022-06-04
    脚本 纯真 数据库
  • python读取数据库
    一、access 1、获取表 http://blog.sina.com.cn/s/blog_92ab5a530102wjxe.html 参考这个链接。我把操作录制下来如下所示   import pypyodbc import time ...
    99+
    2022-04-14
    python读取数据库 数据库入门 数据库基础教程 数据库 mysql
  • Python读取postgresql数据库详情
    目录一、读取PostgreSQL数据库二、查询数据一、读取postgresql数据库 (1)首先,我们需要安装 psycopg 驱动。通过 pip 安装最新的 psycopg pip install psycopg2 -...
    99+
    2022-09-28
  • Python如何读取MySQL数据库表数据
    本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参考,具体内容如下 环境:Python 3.6 ,Window 64bit 目的:从MySQL数据库读取目标表数据,并处理 代码:...
    99+
    2022-06-04
    数据库 数据 Python
  • python读取leveldb数据
    import sys import leveldb def read_data(): if len(sys.argv) < 2: print "pls input leveldb dir" return -1 db = ...
    99+
    2023-01-31
    数据 python leveldb
  • Python读取Hive数据库代码怎么写
    今天小编给大家分享一下Python读取Hive数据库代码怎么写的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实际业务读取hi...
    99+
    2023-07-05
  • SQL数据库怎么读取数据
    本篇内容介绍了“SQL数据库怎么读取数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   &...
    99+
    2022-10-19
  • python Pandas 读取数据,写
    pandas 选取数据 iloc和 loc的用法不太一样,iloc是根据索引, loc是根据行的数值>>> import pandas as pd >>> import os >>> o...
    99+
    2023-01-31
    数据 python Pandas
  • Python读取千万级数据自动写入MySQL数据库
    目录前言场景一:数据不需要频繁的写入mysql场景二:数据是增量的,需要自动化并频繁写入mysql总结前言 Python 读取数据自动写入 MySQL 数据库,这个需求在工作中是非常...
    99+
    2022-11-11
  • Python读取Hive数据库实现代码详解
    目录实际业务读取hive数据库的代码代码说明和领悟后续附上修改成mysql的一个例子代码背景: 在这篇文章之前,我读取数据库的数据没有形成规范,并且代码扩展性不好,使用率不高,而且比...
    99+
    2023-03-01
    Python读取Hive数据库 Python Hive数据库
  • php如何从数据库读取数据
    在PHP中,可以使用MySQLi或PDO扩展来连接和操作数据库。使用MySQLi扩展从数据库读取数据的示例代码如下:```php//...
    99+
    2023-08-23
    php 数据库
  • 从MySQL数据库binlog中读取数据
    1. 执行SQL查看Binlog日志文件名: show binary logs; 举个例子 2.去官网(https://dev.mysql.com/downloads/installer/)下载一个...
    99+
    2023-09-03
    数据库 mysql php
  • vb怎么读取sql数据库数据
    在VB中,可以使用ADO.NET来读取SQL数据库的数据。ADO.NET提供了一系列的类和方法来与数据库进行交互。下面是一个读取数据...
    99+
    2023-09-08
    vb sql数据库
  • python获取最全ip归属地并数据库本
    自己的原创、python3下测试通过:#enconding: utf-8import urllib.requestimport urllib.responseimport urllib.parseimport mysql.connector...
    99+
    2023-01-31
    最全 归属地 数据库
  • python怎么读取数据集
    Python可以使用多种方式来读取数据集,具体取决于数据集的格式和大小。下面是几种常见的方法:1. 使用内置的`open()`函数来...
    99+
    2023-09-08
    python
  • Python读取Excel中的数据
     1、用xlrd包读取excel数据 import xlrddef read_excel(): # 打开文件,xlrd.open_workbook(),函数中参数为文件路径,分为相对路径和绝对路径 workBook = xlrd...
    99+
    2023-09-12
    excel python
  • python 读取excel中的数据
      应为工作的原因有所接触python,学习过程中找了点有用的东东,分享一下   使用xlrd包,它可以运行在所有的平台上。 Windows下载链接: http://download.csdn.net/detail/qianminming...
    99+
    2023-01-31
    数据 python excel
  • python如何读取mongodb数据
    要在Python中读取MongoDB数据,您可以使用PyMongo库。以下是一个简单示例:首先,确保您已经安装了PyMongo库。您...
    99+
    2023-08-23
    python mongodb
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作