linux 下批量重放流量

发布时间:2023年12月26日

介绍

这里介绍的是,如何在 linux 环境下让IDP设备告警
这里linux下流量重放的工具是:tcpreplay

  1. 工具的作用:将PCAP包重新发送,用于性能或者功能测试
  2. 工具的使用与参数,参见:Linux命令 tcpreplay - 将PCAP包重新发送,用于性能或者功能测试_w3cschool
  3. 这里主要介绍如何 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

image.png
从下图可以看出,由于我攻击了两轮,因此告警重复了两次。
image.png

linux 方式3

上面两种方法简单粗放,如果面对大量数据包,我就必须知道当前播放状态等信息,因此需要编写python

  1. 第20行指明轮播次数(默认轮播一次)
  2. 第39行指明要测试的数据包所在路径
  3. 脚本会穿透指定路径下的所有文件
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import time
# import commands    #python2
import subprocess  # python3


def 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 = 0
    print('当前共计数据包:{}个'.format(len(packetname_path)))
    while a < 1:    # 设置数据包轮播次数
        j = 1
        print('当前进行数据回放的第{}轮'.format(a))
        for i in packetname_path:
            try:
                # status = commands.getstatusoutput('tcpreplay -i eth1 -M 10000 "{}"'.format(i))  #python2
                status = subprocess.getstatusoutput('tcpreplay -i eth1 -M 1000 "{}"'.format(i))  # python3
                time.sleep(0.02)
                print('tcpreplay -i eth1 -M 1000 "{}" 当前轮数为:第{}轮,此轮数据包剩余{}个。'.format(i, a, len(packetname_path) - j))
                # print(status)
                j += 1
            except:
                print(i + ' 此轮数据包剩余{}个'.format(len(packetname_path) - 1))
                j += 1
                pass
        a += 1


if __name__ == "__main__":
    packet_path = r'bps-new/'  # 路径自己改
    packetname_path = []
    fileNameGet(packet_path)
    tcpreplayALL()

运行效果如下,成功触发告警
image.png
image.png

文章来源:https://blog.csdn.net/weixin_44288604/article/details/135219225
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。