您现在的位置是:首页 > 技术教程 正文

【自制小工具】快速批量查询IP归属地(自动去重、按国内外汇总,并智能识别出错误IP)

admin 阅读: 2024-03-24
后台-插件-广告管理-内容页头部广告(手机)

作者:Eason_LYC

不放弃,不为别的,只想活成自己心中的样子~

领域:WEB安全、网络攻防

关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半功倍,少走弯路!

博客描述:

一个人的价值,在于他所拥有的,而不是他会的。所以可以不学无数,但不能一无所有!

个人社区:极乐世界-技术至上

我们追求技术至上,这是我们理想中的极乐世界~(关注我即可加入社区)

文章目录

  • 背景
  • 成果
  • 如何使用
  • 使用查询库文件
  • 工具代码分析
  • 不足之处
  • 视频演示(各位看官如满意请对视频三连支持,您的三连是我创作下去的动力!)

背景

如何才能快速提升自己的编写脚本的能力呢,我之前文章中说过“为了学习而学习,永远学不好”。所以本文以我在实际工作中的真实场景为例,讲解自制小工具的思路。

每个人在生活中都会遇到各种问题,将问题抽象梳理出来,利用已掌握或临时自学拼凑的编程知识,来实现自己的目标,你将事半功倍,能力提升水到渠成。

在实际安全工作中,经常会从各种渠道获取大量IP,在进行分析前,首先需要对IP进行如下几项处理

  • IP是否有重复
  • IP是否有错误
  • IP归属地是哪里
  • IP有多少国内或者国外的

上述几件事看上去很简单,网上也有现成的工具或网站可以使用。但是在实际工作中往往IP数量少则上万个,多则十几万,甚至是几十万。而且往往要半小时内出结果。面对这样的实际工作场景,人工或利用半成品工具明显不再合适。

为了在单位继续干下去,也不想累的的猝死,只能自己动手开发了一个小工具。下面就将这个小工具介绍给大家。

成果

是的,没有看错,先看成果,大家才有继续看下去的动力不是?
请添加图片描述
一共7万多个原始IP,下面几个数据一加等于去重后的IP数。详细功能数据如下:

  1. 软件自动去重
  2. 查询归属地
  3. 按国内国外分类汇总
  4. 对未查询到和错误IP进行汇总
  5. 结果自动保存为xlsx格式,方便直接汇报
  6. 总耗时20s,这是封装exe可执行文件后的运行时间,脚本直接运行,相同数据10s左右能完成。
    最终excel成果:
    请添加图片描述
    请添加图片描述
    请添加图片描述

以上就是软件的最终成果,不知各位看官是否满意,至少自制这个小工具后,让我工作轻松不少。

如何使用

工具设计之出就明确,一定要非常容易使用,力求0门槛傻瓜式使用。
打开工具,仅有三个文件,一个程序,一个使用说明,一个文件夹,作用见下图
请添加图片描述
使用的要求只有如下两条:

  1. 将你需要处理的大量IP,在txt格式文件中保存为一列即可,名字最好取ip.txt,然后放到db文件夹中就好了。如下图

请添加图片描述
2. 双击exe运行程序,结果会自动生成result.xlsx。双击后运行界面如下
请添加图片描述
运行过程中的界面
请添加图片描述
结果生成界面
请添加图片描述

步骤已经设计的很简略了,方便易上手有没有

使用查询库文件

本文使用归属地查询的库,是qqwry。这个可以手动从github上下载最新的版本,替换即可。
其实有更好的库,但是qqwry真的很稳,综合考虑就用这个了。

其实软件自带的这个,已经满足日常使用了。

工具代码分析

本工具使用python编写,后续使用Pyinstaller工具,将脚本生成exe可执行程序。

  • 原始脚本中,引用的库只有3个
from qqwry import QQwry # 归属地查询库,实现核心功能 import xlsxwriter # 生成、操作xlsx的库,将结果归类汇总,已特定字段输出到文档中,形成最终成果。 import time # 用于计时,统计执行一次任务运行的时间
  • 1
  • 2
  • 3
  • 根据上文的梳理,我们的需求很明确。所以实现方法和思路如下:
def input_txt(): """ 获取输入IP源文件 1、文件路径,默认为.\db\ip.txt 2、打开文件,以行形式读取内容(单个ip)raw_ip,另外统计原始行数 raw_num 3、初步过滤,去掉每行ip首位多余的空格,去重,统计去重后行数 file_num return raw_ip, raw_num, file_num """ pass def check_input(raw_ip): """ 对各种异常输入的处理,并将异常IP统计到error_ip列表中。目前能是别的异常情况如下【根据实际,持续更新】 1、IP组成不是4个数 2、任意一个数字出现4位数 3、任意一位数出现异常(非数字,0-255之外,非整数...) 过滤后再对所有结果进行去重,无问题IP放到ip列表中 return ip, error_ip """ pass def output_excel(list_home, list_foreign, list_unknown, list_error): """ xlsxwriter这个库使用方式比较固定,根据自己需要设置excel各字段内容和排版 """ pass def ip_search(): """ 主程序,逻辑是调用上述各方法,获取正常ip后,再调用qqwry库,查询ip归属地查询。 另外,cmd中输出内容和格式我也在这里进行的定制。 """ pass if __name__ == '__main__': start = time.time() ip_search() end = time.time() print('耗时: ', round(end - start, 0)) input("please input any key to exit!")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

整个脚本算上空行,一共才164行,真是短小精悍。但是在工作中真的管用。
就像我之前文章中说过的那句话“学以致用才是关键,为了学习而学习,永远学不好”。

不足之处

自己写的软件,不足之处简直太了解了,那我就自爆家丑了。

  1. 无法识别IPv6
  2. 错误处理中,如原IP文件中出现中文句号。则会出现错误不再执行,这个我后续完善下
  3. 归属地查询库只适用单一的qqwry,太low了
  4. 不支持自动更新查询库,这个主要考虑网安工作环境往往不允许连外网,小工具安全起见也不要有连接外网的功能。

反思下上面的问题,其实都应该早早修正。对异常输入不断优化,增加稳定性;库改为多个常用主流查询库,可根据实际情况选择用哪个;自动更新\手动更新,可人工选择。

视频演示(各位看官如满意请对视频三连支持,您的三连是我创作下去的动力!)

【自制小工具】快速批量查询IP归属地(自动去重、按国内外汇总,并智能识别出错误IP)

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜