Разобрать вызов функции - C#
Формулировка задачи:
// метод для получения списка устройств
CaptureDeviceList deviceList = CaptureDeviceList.Instance;
// выбираем первое устройство в спсике (для примера)
ICaptureDevice captureDevice = deviceList[0];
// регистрируем событие, которое срабатывает, когда пришел новый пакет
captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program_OnPacketArrival);
// открываем в режиме promiscuous, поддерживается также нормальный режим
captureDevice.Open(DeviceMode.Promiscuous, 1000);
// начинаем захват пакетов
captureDevice.Capture();
//Теперь в обработчике события device_OnPacketArrival мы можем работать с пакетом:
static void Program_OnPacketArrival(object sender, CaptureEventArgs e)
{
// парсинг всего пакета
Packet packet = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
// получение только TCP пакета из всего фрейма
var tcpPacket = TcpPacket.GetEncapsulated(packet);
// получение только IP пакета из всего фрейма
var ipPacket = IpPacket.GetEncapsulated(packet);
if (tcpPacket != null && ipPacket != null)
{
DateTime time = e.Packet.Timeval.Date;
int len = e.Packet.Data.Length;
// IP адрес отправителя
var srcIp = ipPacket.SourceAddress.ToString();
// IP адрес получателя
var dstIp = ipPacket.DestinationAddress.ToString();
// порт отправителя
var srcPort = tcpPacket.SourcePort.ToString();
// порт получателя
var dstPort = tcpPacket.DestinationPort.ToString();
// данные пакета
var data = tcpPacket.PayloadPacket;
}
}Решение задачи: «Разобрать вызов функции»
textual
Листинг программы
using System;
using System.Runtime.InteropServices;
namespace SharpPcap.LibPcap
{
/// <summary>
/// Base class for all pcap devices
/// </summary>
public abstract partial class PcapDevice : ICaptureDevice
{
//---------------------------
//---------------------------
/// <summary>
/// Notify the OnPacketArrival delegates about a newly captured packet
/// </summary>
/// <param name="p">
/// A <see cref="PacketDotNet.RawPacket"/>
/// </param>
protected void SendPacketArrivalEvent(PacketDotNet.RawPacket p)
{
var handler = OnPacketArrival;
if(handler != null )
{
//Invoke the packet arrival event
handler(this, new CaptureEventArgs(p, this));
}
}
//---------------------------
//---------------------------
}
}