Извлечение деталей пакета в C#
Я хочу реализовать следующие функциональные возможности:
выборка одного за другим пакетов из файла pcap. Мне нужно разделить пакеты в зависимости от их типа протокола. так что в основном я должен иметь возможность изменять объекты пакета, как IP-адрес
Я использую язык C#
Так возможно ли это реализовать с помощью Pcap.net?
Есть ли у кого-нибудь стандартный код? пожалуйста, предоставьте мне это.
Большое спасибо ftm
1 ответ
Да, это возможно.
См. "Чтение пакетов из файла дампа" в руководстве по Pcap.Net.
Сначала загрузите 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;
}
}