作者: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 # 用于计时,统计执行一次任务运行的时间
  • 根据上文的梳理,我们的需求很明确。所以实现方法和思路如下:
def input_txt():"""获取输入IP源文件1、文件路径,默认为.\db\ip.txt2、打开文件,以行形式读取内容(单个ip)raw_ip,另外统计原始行数 raw_num3、初步过滤,去掉每行ip首位多余的空格,去重,统计去重后行数 file_numreturn raw_ip, raw_num, file_num"""passdef check_input(raw_ip):"""对各种异常输入的处理,并将异常IP统计到error_ip列表中。目前能是别的异常情况如下【根据实际,持续更新】1、IP组成不是4个数2、任意一个数字出现4位数3、任意一位数出现异常(非数字,0-255之外,非整数...)过滤后再对所有结果进行去重,无问题IP放到ip列表中return ip, error_ip """passdef output_excel(list_home, list_foreign, list_unknown, list_error):"""xlsxwriter这个库使用方式比较固定,根据自己需要设置excel各字段内容和排版 """passdef ip_search():"""主程序,逻辑是调用上述各方法,获取正常ip后,再调用qqwry库,查询ip归属地查询。另外,cmd中输出内容和格式我也在这里进行的定制。"""passif __name__ == '__main__':start = time.time()ip_search()end = time.time()print('耗时: ', round(end - start, 0))input("please input any key to exit!")

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

不足之处

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

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

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

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

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