You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python脚本提取PCAP文件的UDP流并保存为.ts文件?

用Python提取PCAP中的UDP流并保存为.ts文件

你可以用scapy库实现和Wireshark相同的功能,以下是具体步骤和脚本:

1. 安装依赖

首先安装scapy库:

pip install scapy

2. 提取指定UDP流并保存为.ts文件

步骤说明

  • 读取PCAP文件,筛选出包含UDP负载的数据包
  • 匹配目标UDP流(UDP流是双向的,需同时匹配两个方向的数据包)
  • 拼接所有匹配数据包的原始负载数据,写入.ts文件

示例脚本

from scapy.all import rdpcap, IP, UDP, Raw

# 替换为你的PCAP文件路径
pcap_path = "input.pcap"
# 替换为你要提取的UDP流的IP和端口(可通过下方的流查询脚本获取)
target_stream = (
    ("192.168.1.100", 1234),  # 源IP、源端口
    ("192.168.1.200", 5678)   # 目的IP、目的端口
)

raw_data = b""
# 读取PCAP文件
packets = rdpcap(pcap_path)

for pkt in packets:
    # 只处理包含UDP和原始负载的数据包
    if IP in pkt and UDP in pkt and Raw in pkt:
        # 构造当前包的流标识(双向匹配)
        current_flow = tuple(sorted(
            ((pkt[IP].src, pkt[UDP].sport), (pkt[IP].dst, pkt[UDP].dport))
        ))
        target_flow = tuple(sorted(target_stream))
        # 如果当前包属于目标流,追加负载数据
        if current_flow == target_flow:
            raw_data += pkt[Raw].load

# 写入.ts文件
with open("video.ts", "wb") as ts_file:
    ts_file.write(raw_data)

3. 先查询PCAP中的所有UDP流(可选)

如果你不知道目标UDP流的IP和端口,可以先运行以下脚本列出所有UDP流:

from scapy.all import rdpcap, IP, UDP

pcap_path = "input.pcap"
udp_streams = set()

for pkt in rdpcap(pcap_path):
    if IP in pkt and UDP in pkt:
        # 用排序后的元组存储流,避免重复统计双向流
        stream = tuple(sorted(
            ((pkt[IP].src, pkt[UDP].sport), (pkt[IP].dst, pkt[UDP].dport))
        ))
        udp_streams.add(stream)

# 打印所有UDP流
for i, stream in enumerate(udp_streams, 1):
    print(f"流 {i}: {stream[0][0]}:{stream[0][1]} <-> {stream[1][0]}:{stream[1][1]}")

注意事项

  • 确保PCAP中的UDP数据包确实包含.ts格式的原始数据(和Wireshark中看到的Raw数据一致)
  • rdpcap会将整个PCAP加载到内存,处理超大文件时可以分批读取,例如:
    from scapy.all import PcapReader
    with PcapReader(pcap_path) as reader:
        for pkt in reader:
            # 处理逻辑同上
            pass
    
  • 数据包的顺序和PCAP中的时间顺序一致,和Wireshark导出的结果顺序相同

内容的提问来源于stack exchange,提问作者carraro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:25:07