作者:Eason_LYC
不放弃,不为别的,只想活成自己心中的样子~
领域:WEB安全、网络攻防
关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让你在学习路上事半功倍,少走弯路!
博客描述:
一个人的价值,在于他所拥有的,而不是他会的。所以可以不学无数,但不能一无所有!
个人社区:极乐世界-技术至上
我们追求技术至上,这是我们理想中的极乐世界~(关注我即可加入社区)
文章目录
如何才能快速提升自己的编写脚本的能力呢,我之前文章中说过“为了学习而学习,永远学不好”。所以本文以我在实际工作中的真实场景为例,讲解自制小工具的思路。
每个人在生活中都会遇到各种问题,将问题抽象梳理出来,利用已掌握或临时自学拼凑的编程知识,来实现自己的目标,你将事半功倍,能力提升水到渠成。
在实际安全工作中,经常会从各种渠道获取大量IP,在进行分析前,首先需要对IP进行如下几项处理
- IP是否有重复
- IP是否有错误
- IP归属地是哪里
- IP有多少国内或者国外的
- …
上述几件事看上去很简单,网上也有现成的工具或网站可以使用。但是在实际工作中往往IP数量少则上万个,多则十几万,甚至是几十万。而且往往要半小时内出结果。面对这样的实际工作场景,人工或利用半成品工具明显不再合适。
为了在单位继续干下去,也不想累的的猝死,只能自己动手开发了一个小工具。下面就将这个小工具介绍给大家。
是的,没有看错,先看成果,大家才有继续看下去的动力不是?
一共7万多个原始IP,下面几个数据一加等于去重后的IP数。详细功能数据如下:
- 软件自动去重
- 查询归属地
- 按国内国外分类汇总
- 对未查询到和错误IP进行汇总
- 结果自动保存为xlsx格式,方便直接汇报
- 总耗时20s,这是封装exe可执行文件后的运行时间,脚本直接运行,相同数据10s左右能完成。
最终excel成果:
以上就是软件的最终成果,不知各位看官是否满意,至少自制这个小工具后,让我工作轻松不少。
工具设计之出就明确,一定要非常容易使用,力求0门槛傻瓜式使用。
打开工具,仅有三个文件,一个程序,一个使用说明,一个文件夹,作用见下图
使用的要求只有如下两条:
- 将你需要处理的大量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行,真是短小精悍。但是在工作中真的管用。
就像我之前文章中说过的那句话“学以致用才是关键,为了学习而学习,永远学不好”。
自己写的软件,不足之处简直太了解了,那我就自爆家丑了。
- 无法识别IPv6
- 错误处理中,如原IP文件中出现中文句号
。
则会出现错误不再执行,这个我后续完善下 - 归属地查询库只适用单一的qqwry,太low了
- 不支持自动更新查询库,这个主要考虑网安工作环境往往不允许连外网,小工具安全起见也不要有连接外网的功能。
反思下上面的问题,其实都应该早早修正。对异常输入不断优化,增加稳定性;库改为多个常用主流查询库,可根据实际情况选择用哪个;自动更新\手动更新,可人工选择。
【自制小工具】快速批量查询IP归属地(自动去重、按国内外汇总,并智能识别出错误IP)
来源地址:https://blog.csdn.net/eason612/article/details/126912595