Ich habe den Leitfaden auf der Seite http://www.codeproject.com/KB/IP/sharppcap.aspx für die Implementierung eines einfachen Paket-Sniffers, um Authentifizierungen für mich zu automatisieren, habe ich es geschafft, zum Abschnitt Filtering zu gelangen, und musste bisher einige Anpassungen am Code des Tutorials vornehmen, damit es funktioniert, aber jetzt bin ich ratlos.
Der Fehler, den ich erhalte, lautet;
Die beste überladene Methode für 'PacketDotNet.TcpPacket.GetEncapsulated(PacketDotNet.Packet)' hat einige ungültige Argumente
Argument 1: kann nicht von 'SharpPcap.RawCapture' nach 'PacketDotNet.Packet' konvertieren
Aber ich selbst habe noch keine Verweise auf PacketDotNet gemacht (bisher war alles SharpPcap).
Der gesamte Code, den ich bisher habe, ist enthalten, das Problem liegt in der Funktion device_OnPacketArrival().
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PacketDotNet;
using SharpPcap;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string ver = SharpPcap.Version.VersionString;
Console.WriteLine("SharpPcap {0}, Example1.IfList.cs", ver);
// Retrieve the device list
CaptureDeviceList devices = CaptureDeviceList.Instance;
// If no devices were found print an error
if (devices.Count < 1)
{
Console.WriteLine("No devices were found on this machine");
return;
}
// Extract a device from the list
ICaptureDevice device = devices[0];
// Register our handler function to the
// 'packet arrival' event
device.OnPacketArrival +=
new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival);
// Open the device for capturing
int readTimeoutMilliseconds = 1000;
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);
// tcpdump filter to capture only TCP/IP packets
string filter = "ip and tcp";
device.Filter = filter;
Console.WriteLine();
Console.WriteLine("-- The following tcpdump filter will be applied: \"{0}\"",
filter);
Console.WriteLine("-- Listening on {0}, hit 'Enter' to stop...",
device.Description);
// Start capturing packets indefinitely
device.Capture();
// Close the pcap device
// (Note: this line will never be called since
// we're capturing indefinitely
device.Close();
}
private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
var tcp = TcpPacket.GetEncapsulated(e.Packet);
}
}
}