- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
Scapy 有一个 sendpfast
函数,它使用 tcpreplay 发送数据包。但是,此函数首先创建一个临时 pcap 文件,然后对其调用 tcpreplay。这增加了太多的延迟。反正有没有绕过它直接发送数据到tcpreplay。我知道 tcpreplay 可以从 STDIN 读取数据。
上下文:我想每秒生成大量流量(使用不同的 srcIP)并通过网络发送。一种选择是将所有带有时间戳的流量保存在一个巨大的 pcap 文件中并运行 tcpreplay。另一种选择是每秒发送一次数据。
最佳答案
不确定是否避免临时文件就足够了,但仍然有一种方法:
#! /usr/bin/env python
from scapy.all import *
def pkt2pcap(p):
sec = int(p.time)
usec = int(round((p.time-sec)*1000000))
s = str(p)
caplen = len(s)
return struct.pack("IIII", sec, usec, caplen, caplen) + s
# adapted from Scapy's sendpfast
def mysendpfast(x, pps=None, mbps=None, realtime=None, loop=0, file_cache=False, iface=None):
"""Send packets at layer 2 using tcpreplay for performance
pps: packets per second
mpbs: MBits per second
realtime: use packet's timestamp, bending time with realtime value
loop: number of times to process the packet list
file_cache: cache packets in RAM instead of reading from disk at each iteration
iface: output interface """
if iface is None:
iface = conf.iface
argv = [conf.prog.tcpreplay, "--intf1=%s" % iface ]
if pps is not None:
argv.append("--pps=%i" % pps)
elif mbps is not None:
argv.append("--mbps=%i" % mbps)
elif realtime is not None:
argv.append("--multiplier=%i" % realtime)
else:
argv.append("--topspeed")
if loop:
argv.append("--loop=%i" % loop)
if file_cache:
argv.append("--enable-file-cache")
argv.append("-")
try:
f = subprocess.Popen(argv, stdin=subprocess.PIPE)
# PCAP header
p = x.next()
f.stdin.write(struct.pack("IHHIIII", 0xa1b2c3d4L,
2, 4, 0, 0, MTU,
conf.l2types[p.__class__]))
# Let's send
f.stdin.write(pkt2pcap(p))
for p in x:
f.stdin.write(pkt2pcap(p))
f.stdin.close()
f.communicate()
except KeyboardInterrupt:
log_interactive.info("Interrupted by user")
except Exception,e:
log_interactive.error("while trying to exec [%s]: %s" % (argv[0],e))
关于python - Scapy 和 tcpreplay : bypass temporary file for performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760102/
我正在尝试使用 tcpreplay 发送 pcap 文件的内容。它拒绝发送一些数据包,因为它们太长了。但是,它没有继续处理下一个数据包,而是停止了: $ tcpreplay -i p4p1 mult
当我使用“tcpreplay”向我的交换机发送数据包时,我发现数据包乱序。例如,使用 tcpreplay -i eth1 test.pcap ,我得到: 我发送像 **[1,2,3,4,5,……]**
在服务器 # nc -lp 2424 hi server hi client 1 2 3 在客户端 ➜ ~ nc 139.224.xxx.xx 2424 hi server hi client 1
在tcpreplay 中有一个非常有用的功能,根据official FAQ's , 使用参数 -T 调用: The packet length (in this case 8892 bytes) is
以下代码段只会等待用户第一次点击 Enter;之后,它会循环遍历所有剩余的 .pcap 文件,而无需等待用户输入。 $| = 1; while () { print "$_"; ;
我正在执行一些实验,其中我想重播之前从 Android 捕获的数据包跟踪。到目前为止,我已经编写了自己的应用程序来重播跟踪,然后从服务器获得回复。只要在合理范围内(例如,几毫秒),计时精度就不是大问题
我有一个要重放的 pcap 文件。我想重写数据包有效负载以包含时间戳。我怎样才能用 tcpreplay 做到这一点?或 tcprewrite ?有默认选项还是我应该自己实现(修改tcpreplay)?
我的服务器会在工作日的某个时间段接收到 UDP 组播数据包。我编写了一个 c 套接字应用程序来接收这些 UDP 多播数据包。由于我的服务器只能在某个时间段接收数据包,为了测试,我用tcpdump抓包。
我已经安装了 tcpreplay,在此之前安装了 libdnet libevent 和 fragroute,但 fragroute 引擎已禁用,我无法在 tcprewrite 中使用 --fragro
我有两个程序: 服务器...它在选定的多播上生成 UDP 流量 listener ...它打印所选多播上的 UDP 流量 (它订阅多播并打印 无论它收到什么)。 当我在一台计算机上运行服务器并在某些(
我正在尝试在 C 中添加 tcpreplay 库,以便我可以重写数据包中的数据。我一直在寻找 C 编程中的库。结果是添加了 TCPreplay 并开始使用它的方法。不幸的是,它不适用于 C 语言。如果
我正在开展一个项目,该项目使用 Twisted 提供高性能 UDP 服务器,能够处理每秒 5k 数据包的突发流量,数据包大小从 50 到 100 字节不等。我正在测试服务器的 PC 具有四核 CPU
我有一个非常简单的脚本要运行。它调用 tcpreplay 然后要求用户输入一些东西。然后读取将失败并读取:读取错误:0:资源暂时不可用。 这是代码 #!/bin/bash tcpreplay -iet
Scapy 有一个 sendpfast 函数,它使用 tcpreplay 发送数据包。但是,此函数首先创建一个临时 pcap 文件,然后对其调用 tcpreplay。这增加了太多的延迟。反正有没有绕过
我是一名优秀的程序员,十分优秀!