目录
- 介绍
- 实操
- linux方式1,2
- linux 方式3
介绍
这里介绍的是,如何在 linux 环境下让IDP设备告警
这里linux下流量重放的工具是:tcpreplay
- 工具的作用:将PCAP包重新发送,用于性能或者功能测试
- 工具的使用与参数,参见:Linux命令 tcpreplay - 将PCAP包重新发送,用于性能或者功能测试_w3cschool
- 这里主要介绍如何 linux 下如何实现批量重放流量
以下介绍的所有方式,都是基于播放的数据包能抵达IDP监听的网卡
实操
linux方式1,2
方式1:直接调用tcpreplay播放当前目录下的所有数据包(以通配符*
实现这一目的)
方式2:编写shell脚本,遍历当前目录下的所有文件,把每次遍历的值作为变量交给 tcpreplay 重放
tcpreplay -i eth1 -M 1000 *.pcap # 方式1
for i in $(ls ./); do tcpreplay -i eth1 -M 1000 $i; done # 方式2
从下图可以看出,由于我攻击了两轮,因此告警重复了两次。
linux 方式3
上面两种方法简单粗放,如果面对大量数据包,我就必须知道当前播放状态等信息,因此需要编写python
- 第20行指明轮播次数(默认轮播一次)
- 第39行指明要测试的数据包所在路径
- 脚本会穿透指定路径下的所有文件
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import time
# import commands #python2
import subprocess # python3def fileNameGet(path):for root, dirs, files in os.walk(path):for file in files:# print(os.path.join(root,file),type(os.path.join(root,file)))if os.path.join(root, file).endswith('.pcap') or os.path.join(root, file).endswith('.pcapng') or os.path.join(root, file).endswith('.cap'):packetname_path.append(os.path.join(root, file))def tcpreplayALL():a = 0print('当前共计数据包:{}个'.format(len(packetname_path)))while a < 1: # 设置数据包轮播次数j = 1print('当前进行数据回放的第{}轮'.format(a))for i in packetname_path:try:# status = commands.getstatusoutput('tcpreplay -i eth1 -M 10000 "{}"'.format(i)) #python2status = subprocess.getstatusoutput('tcpreplay -i eth1 -M 1000 "{}"'.format(i)) # python3time.sleep(0.02)print('tcpreplay -i eth1 -M 1000 "{}" 当前轮数为:第{}轮,此轮数据包剩余{}个。'.format(i, a, len(packetname_path) - j))# print(status)j += 1except:print(i + ' 此轮数据包剩余{}个'.format(len(packetname_path) - 1))j += 1passa += 1if __name__ == "__main__":packet_path = r'bps-new/' # 路径自己改packetname_path = []fileNameGet(packet_path)tcpreplayALL()
运行效果如下,成功触发告警