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

时间:2014-11-27 16:46:28

标签: c# pcap pcap.net

我想实现以下功能:

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

这样的包对象

我使用的语言是c#

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

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

非常感谢 FTM

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。

参见"从转储文件读取数据包"在Pcap.Net's tutorial

答案 1 :(得分: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;
}
}