Python安全工具编写-pcap流量包重放
2021/12/15 22:17:22
本文主要是介绍Python安全工具编写-pcap流量包重放,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近因为log4j漏洞,工作量急剧增加,卑微小乙没日没夜地进行应急处理,为了能测试是否能检测到log4j攻击,我专门写了一个脚本,当然这个脚本也不只是检测log4j,只要是pcap包放在指定目录下则可以重放。
我写脚本的时候总喜欢先确认功能点,毕竟这是我们写代码的前提了。
功能点:将指定目录中所有pcap文件全部找出重放
1,找到指定目录(pcaps)中所有pcap文件
def find_pcap(dir,filelist): for i in os.listdir(dir):#将目录下所有内容拉出来判断 path = os.path.join(dir,i)#拼接单个内容和路径 if os.path.isfile(path):#判断path是否是文件 if os.path.splitext(path)[1] == '.pcap':#判断是否是pcap文件 filelist.append(path)#将pcap文件添加到filelist表中 elif os.path.isdir(path):#判断是否是目录 newdir = path#拼接成新的目录路径 find_pcap(newdir,filelist)#递归再次寻找pcap文件 return filelist#返回最终获取到的pcap表
2,将pcap文件全部重放
#这里直接调用了系统自带的tcpreplay工具 def run_pcap(pcap,net_card): tmp_pcap = os.path.splitext(os.path.basename(pcap))[0]#提取出文件名 print("[+] 正在重放%s" % tmp_pcap)#提示正在重放文件名 os.system('tcpreplay -i %s -x 3.0 -K %s ' % (net_card,pcap))#拼接命令net_card是网卡,pcap是文件
主要功能点已经写出来了,那么剩下的就是一些优化代码:
1,加入重放日志,以便排查
2,利用多线程的方式,可以同时重放pcap包
3,判断目录是否存在pcap文件
4,将输出的字体以颜色来显示高亮
5,指定重放pcaps目录中的某个或多个目录中的pcap
代码
import sys import os import os.path import threading #导入sys(获取输入的值),os(运行系统命令).os.path(运行系统文件操作),threading(多线程)模块 def find_pcap(dir,filelist): for i in os.listdir(dir):#将目录下所有内容拉出来判断 path = os.path.join(dir,i)#拼接单个内容和路径 if os.path.isfile(path):#判断path是否是文件 if os.path.splitext(path)[1] == '.pcap':#判断是否是pcap文件 filelist.append(path)#将pcap文件添加到filelist表中 elif os.path.isdir(path):#判断是否是目录 newdir = path#拼接成新的目录路径 find_pcap(newdir,filelist)#递归再次寻找pcap文件 return filelist#返回最终获取到的pcap表 def run_pcap(pcap,net_card): tmp_pcap = os.path.splitext(os.path.basename(pcap))[0]#提取出文件名 print("\033[1;32;40m[+] 正在重放%s\033[0m" % tmp_pcap)#提示正在重放文件名 os.system('touch %s%s.log' % (log_dir,tmp_pcap))#创建log文件 file_log = log_dir + tmp_pcap#拼接log路径 os.system('tcpreplay -i %s -x 3.0 -K %s > %s.log 2>&1' % (net_card,pcap,file_log))#拼接命令net_card是网卡,pcap是文件 def main(): global current_dir,file_dir,log_dir,filelist#将目录以及pcap列表都设置为全局变量 current_dir = os.getcwd()#获取当前目录 file_dir = os.path.join(current_dir,'pcaps/')#获取pcaps目录 log_dir = os.path.join(os.getcwd(),'log/')#获取日志目录 filelist = []#初始化pcap表 choice_file = []#初始化选择pcap表 if len(sys.argv) >= 2:#判断用户是否输入目录名称 for i in range(1,len(sys.argv)):#将输入的目录依次执行以下操作 path = sys.argv[i]#获取目录名称 choice_file_dir = os.path.join(file_dir,path)#拼接目录 try: choice_file = _read_dir_pcap(choice_file_dir, filelist)#尝试获取指定目录下的pcap文件 except: print("\033[1;31;40m[-] 运行失败,请检查是否将目录放在pcaps目录中!\033[0m")#如果出现报错,则检查是否是输入有问题或目录是否不存在 exit()#退出程序 else: print("\033[1;34m[*] 未选择目录,默认重放pcaps目录下所有pcap包\033[0m")#如果没有输入指令,则将pcaps目录下所有pcap文件重放 choice_file = _read_dir_pcap(file_dir,filelist)#获取所有pcap文件 if len(filelist) == 0:#如果pcaps中没有pcap文件则退出程序 print("\033[1;31;40m[-] 运行失败,请检查是否将文件或目录放在pcaps目录中!\033[0m") exit() else: if len(choice_file) == 0: print("\033[1;31;40m[-] 运行失败,请确认目录是否有pcap文件!\033[0m") #如果选择目录中没有pcap文件,则退出程序 exit() net_card = input("请输入重放数据包的网卡名称:")#输入从哪个网卡发送流量包 #设置多线程重放 for i in choice_file: t = threading.Thread(target=pcap_poc, args=(i,log_dir,net_card)) t.setDaemon(True) t.start() print("\033[1;34m[*]如有pcap未重放,可以在log/xxx.log查看重放信息\033[0m") if __name__ == "__main__": main()
所需目录
实验截图
未指定目录
指定目录
查看log文件
这篇关于Python安全工具编写-pcap流量包重放的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器