IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> python3利用纯真库批量定位IP -> 正文阅读

[网络协议]python3利用纯真库批量定位IP

? ? 利用纯真库,可以方便地定位,这个功能用python3也不难实现,在实际数据中,可能还会遇到脏数据的情况,因此,还需要解决两个问题,一个是对ip地址合法性的判断,合规合法的ip地址字符串才能进行查询,另一个如果再遇到特殊情况,还要能够跳过,不影响程序继续进行。chunzhenDB.txt是纯真库数据文件

#coding=utf8
import socket
import struct

#用于判断ip地址合法性

def is_ipv4(ip:str)->bool:
? ? return ([True]*4 == [(True) if (x.isdigit() and 0 <= int(x) <=255) else (False) for x in ip.split('.')])

def ip2long(ip):
? ? return struct.unpack('!I',socket.inet_aton(ip))[0]

def long2ip(longip):
? ? return socket.inet_ntoa(struct.pack('!I', longip))

class ChunzhenDB:
? ? quick_chunzhen={}
? ? chunzhen_dic={}
? ? ipList=[]
? ? def init(self):
? ? ? ? self.quick_chunzhen={}
? ? ? ? self.chunzhen_dic={}
? ? ? ? self.ipList=[]

? ? def loadChunzhenDB(self, filename='chunzhenDB.txt', encoding='utf8'):
? ? ? ? f = open(filename, 'r', encoding=encoding)
? ? ? ? lines = f.readlines()
? ? ? ? f.close()
? ? ? ? firstLine=True
? ? ? ? for line in lines:
? ? ? ? ? ? line=line.strip()
? ? ? ? ? ? if firstLine:
? ? ? ? ? ? ? ? firstLine=False
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? start = line[:15].strip()
? ? ? ? ? ? self.chunzhen_dic[int(ip2long(start))] = line[32:].strip()
? ? ? ? self.ipList=list(self.chunzhen_dic.keys())
? ? ? ? self.ipList.sort()

? ? def GetChunzhenInfo(self, ip):
? ? ? ? if ip in self.quick_chunzhen:
? ? ? ? ? ? return self.quick_chunzhen[ip]
? ? ? ? else:
? ? ? ? ? ? longip = ip2long(ip)
? ? ? ? ? ? x=0
? ? ? ? ? ? y=len(self.chunzhen_dic)-1
? ? ? ? ? ? while(x!=y-1):
? ? ? ? ? ? ? ? mid = int((x+y)/2)
? ? ? ? ? ? ? ? if self.ipList[mid]==longip:
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? elif self.ipList[mid]<longip:
? ? ? ? ? ? ? ? ? ? x=mid
? ? ? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? y=mid
? ? ? ? ? ? self.quick_chunzhen[ip]=self.chunzhen_dic[self.ipList[x]]
? ? ? ? ? ? return self.chunzhen_dic[self.ipList[x]]

chunzhendb = ChunzhenDB()
chunzhendb.loadChunzhenDB()
infile = open('./iplist_info.txt','r')
lines = infile.readlines()
for line in lines:
? ? ipstr = line.split(',')[1]#用于提取ip地址字符串,要根据实际情况进行调整
? ? #print(is_ipv4(ipstr))
? ? if is_ipv4(ipstr):
? ? ? ? try:
? ? ? ? ? ? #print(chunzhendb.GetChunzhenInfo(ipstr))
? ? ? ? ? ? chunzheninfo = chunzhendb.GetChunzhenInfo(ipstr)
? ? ? ? ? ? line=line.replace(ipstr,ipstr+','+chunzheninfo)
? ? ? ? ? ? print(line,end='')
? ? ? ? except Exception:#跳过,让程序继续执行,不要退出
? ? ? ? ? ? pass

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:17:07  更:2022-07-20 19:18:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:46:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码