在c#中提取数据包详细信息

问题描述 投票:2回答:2

我想实现以下功能:

从pcap文件中逐个获取数据包。我需要根据协议类型分离数据包。所以基本上我应该能够改变像ip地址这样的包对象

我正在使用的语言是c#

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

是否有标准代码可供任何人使用?请提供给我。

非常感谢

c# pcap pcap.net
2个回答
1
投票

对的,这是可能的。

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


0
投票

首先,下载PcapDotNet.Core.dll和PcapDotNet.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;
}
}
© www.soinside.com 2019 - 2024. All rights reserved.