2

我想实现以下功能:

从 pcap 文件中一一获取数据包。我需要根据它们的协议类型来分离数据包。所以基本上我应该能够更改数据包对象,如 IP 地址

我使用的语言是 c#

那么这可以使用 Pcap.net 来实现吗?

任何人都可以使用标准代码吗?请提供给我。

非常感谢 ftm

4

2 回答 2

1

对的,这是可能的。

请参阅Pcap.Net 教程中的“从转储文件中读取数据包” 。

于 2014-11-28T10:10:45.980 回答
0

首先,下载PcapDotNet.Core.dllPcapDotNet.Packets.dll然后创建一个类

public class Session
{
    private IList<Packet> _PacketsSequence;

    public IList<Packet> PacketsSequence
    {
        get
        {
            if (_PacketsSequence == null)
                _PacketsSequence = new List<Packet>();
            return _PacketsSequence;
        }

        set { _PacketsSequence = value; }
    }
}

然后创建类

public class PacketParser
{
private List<Session> _TermonatedSessions;
private IList<Session> _Sessions;
private IDictionary<int, List<Packet>> _Buffer;

public PacketParser()
{
    _TermonatedSessions = new List<Session>();
    _Sessions = new List<Session>();
    _Buffer = new Dictionary<int, List<Packet>>();
}

public void ParsePacket(string filePath)
{
    OfflinePacketDevice selectedDevice = new OfflinePacketDevice(filePath);
    using (PacketCommunicator communicator = selectedDevice.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000))
    {
        try
        {
            communicator.ReceivePackets(0, AnalyzeCurrentPacket);
        }
        catch { }
    }

    var AnalyzedSession = CombineOpenCloseSessions();
}

private IList<Session> CombineOpenCloseSessions()
{
    _TermonatedSessions.AddRange(_Sessions);
    _Sessions.Clear();
    _Buffer.Clear();

    return _TermonatedSessions;
}
}
于 2019-04-15T11:16:18.250 回答