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

如何用C# .NET库将单条CSV记录转为Wireshark可识别的pcap记录?

把CSV记录转成Wireshark可识别的PCAP文件(.NET实现)

首选工具库:SharpPcap

直接通过NuGet安装:Install-Package SharpPcap,这是.NET生态里活跃的PCAP读写库,完美适配Wireshark的PCAP格式。

分步实现代码

1. 解析CSV字段

先把你的CSV拆成可用的字段:

var csvLine = "\"1\",\"0.000000\",\"2.1.1.2\",\"2.1.1.1\",\"IPv4\",\"1010\",\"Fragmented IP protocol (proto=ICMP 1, off=0, ID=b5d0) [Reassembled in #2]\"";
var parts = csvLine.Split(new[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries)
                   .Select(p => p.Trim('"'))
                   .ToArray();

// 提取核心数据
var timestamp = TimeSpan.Parse(parts[1]);
var srcIp = IPAddress.Parse(parts[2]);
var dstIp = IPAddress.Parse(parts[3]);
var totalLen = int.Parse(parts[5]);
// 从描述里抠出IP分片关键参数
var ipId = ushort.Parse("b5d0", System.Globalization.NumberStyles.HexNumber);
var proto = 1; // ICMP协议号
var fragOffset = 0;

2. 构造完整的网络数据包

因为CSV记录是IPv4分片,得先搭以太网帧(Wireshark默认认以太网链路层),再做IPv4分片头部:

// 填个合法MAC就行,CSV没给不影响IPv4解析
var srcMac = PhysicalAddress.Parse("00:11:22:33:44:55");
var dstMac = PhysicalAddress.Parse("AA:BB:CC:DD:EE:FF");
var ethFrame = new EthernetPacket(srcMac, dstMac, EthernetType.None);

// 构造带分片标识的IPv4头部
var ipHeader = new IPv4Packet(srcIp, dstIp)
{
    Id = ipId,
    Protocol = (IPv4Protocol)proto,
    FragmentOffset = (ushort)(fragOffset << 3), // PCAP里偏移量单位是8字节,要左移3位
    Flags = IPv4Flags.MoreFragments, // 描述说在#2重组,所以标记还有后续分片
    TotalLength = (ushort)totalLen,
    TimeToLive = 64
};

// 填充空负载(CSV没给具体内容,填0字节不影响Wireshark识别分片)
var payload = new byte[totalLen - ipHeader.HeaderLength];
Array.Fill(payload, (byte)0);
ipHeader.PayloadPacket = new Packet(payload);

// 把IPv4包挂到以太网帧下
ethFrame.PayloadPacket = ipHeader;

// 设置时间戳:PCAP用UTC时间,这里假设0.000000是捕获起始点,所以用当前UTC时间减偏移
var captureStart = DateTime.UtcNow - timestamp;
ethFrame.Timestamp = new DateTimeOffset(captureStart);

3. 写入PCAP文件

用SharpPcap的PcapWriter直接输出:

using var pcapWriter = new PcapWriter("output.pcap", LinkLayers.Ethernet);
pcapWriter.Write(ethFrame);

几个关键细节

  • MAC地址:随便填合法格式就行,Wireshark主要看上层IPv4内容,不影响解析
  • IP分片偏移:必须左移3位,因为PCAP里的偏移量是以8字节为单位的,和你CSV里的off=0对应
  • 分片标记:因为描述里写了[Reassembled in #2],所以要开MoreFragments标记,Wireshark才会识别成待重组的分片
  • 时间戳:如果不需要严格对应,直接用DateTimeOffset.UtcNow也行,Wireshark会正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:52:56