Hallo Gemeinde,
ich beschäftige mich momentan mit Netzwerkanalyse und dem SharpPcap Framework.
Dazu gibt es genügend Lektüre im Internet und man versteht eigentlich recht schnell worum es geht. Ein Problem tritt beim Filtering auf, bzw. kann ich mir nach Angabe des Filters die Werte nicht anzeigen lassen.
Woran könnte das liegen?
Quellcode:
ICaptureDevice device = Devices[0];
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);
string filter = "ip and tcp";
device.Filter = filter;
device.Capture();
Console.WriteLine("-- Abhören von Schnittstelle {0}: ",device.Description);
Console.ReadLine();
device.Close();
Vielen Dank für die Hilfe
Gruß, Hurri
Was soll denn passieren, wenn da etwas aufgefangen wird?
Ich sehe da im Code keinerlei Hinweis
Ich wollte mir zuerst nur anschauen ob da Pakete sind die diesem Filter entsprechen.
Anschauen geht aber nur dann, wenn etwas angezeigt wird.
Wo hast du definiert wann, wie und was er anzeigen soll?
Achso...
Ich dachte die Ausgabe findet über die Methode statt, über welche auch die normale Anzeige aller Daten stattfindet.
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
{
DateTime time = packet.Packet.Timeval.Date;
int len = packet.Packet.Data.Length;
Console.WriteLine("{0}:{1}:{2},{3} Len={4}",
time.Hour, time.Minute, time.Second, time.Millisecond, len);
}
Dazu habe ich etwas weiter oben den EventHandler implementiert.
device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival);
Schau dir den Code aus deinem ersten Beitrag an. Dort hängst du dich an keinen Event dran.
Ich kann ja nur zu dem Code den ich sehe etwas sagen und nichts zu dem, der nicht da ist.
Also, wie sieht denn dein Code komplett aus, wo du nichts siehst?
Der komplette Code sieht so aus:
#region Adapter anlegen und Pakete erfassen
ICaptureDevice device = Devices[0]; // Erstellen eines Gerätes aus der Liste
device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival); // EventHandler
int readTimeoutMilliseconds = 1000;
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds); // Öffnet Geräteschnittstelle
Console.WriteLine("-- Gerät {0} auslesen",device.Description);
device.StartCapture(); // Prozess Start
Console.ReadLine();
Console.Clear();
device.StopCapture(); // Prozess Stop
device.Close(); // Schließt Geräteschnittstelle
#endregion
#region Pakete mit Filter
// device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_FilterPacket); // EventHandler
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds); // Öffnet Schnittstelle
string filter = "ip and tcp"; // Filter für IP und TCP
device.Filter = filter; // Filter dem Gerät zuweisen
device.Capture(); // Start Paketerfassung
Console.WriteLine("-- Angewendeter Filter \"{0}\"",filter);
Console.WriteLine("-- Abhören von Schnittstelle {0}: ",device.Description);
Console.ReadLine();
device.Close();
#endregion
Zusätzlich die Event-Methode für Fall 1 (region Adapter anlegen und Pakete erfassen)
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
{
DateTime time = packet.Packet.Timeval.Date;
int len = packet.Packet.Data.Length;
Console.WriteLine("{0}:{1}:{2},{3} Len={4}",
time.Hour, time.Minute, time.Second, time.Millisecond, len);
}
Ich benötige wohl auch eine Event-Methode für den unteren Teil.
Da fehlt immer noch etwas Code.
Die Frage ist wann wird der erste Code Ausschnitt aufgerufen/verarbeitet?
Gruß
Guten Morgen.
Da es sich um erste Tests handelt, erfolgt momentan keine Weiterverarbeitung der Daten.
Eine normale Konsolenanwendung mit einer Kommandozeilenausgabe die hintereinander implementiert ist.
Vom oberen Bsp. (region Adapter anlegen und Pakete erfassen) werden die Daten nur in der Event-Methode ausgegeben.
Ich möchte jetzt gerne Filter für diese Pakete anwenden und mir nur bestimmte Typen (ip und tcp) anzeigen lassen.
Hallo,
ich glaube du verstehst uns nicht ganz. Schaut dein Code so aus?
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
#region Adapter anlegen und Pakete erfassen
ICaptureDevice device = Devices[0]; // Erstellen eines Gerätes aus der Liste
device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival); // EventHandler
int readTimeoutMilliseconds = 1000;
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds); // Öffnet Geräteschnittstelle
Console.WriteLine("-- Gerät {0} auslesen",device.Description);
device.StartCapture(); // Prozess Start
Console.ReadLine();
Console.Clear();
device.StopCapture(); // Prozess Stop
device.Close(); // Schließt Geräteschnittstelle
#endregion
#region Pakete mit Filter
// device.OnPacketArrival += new SharpPcap.PacketArrivalEventHandler(device_FilterPacket); // EventHandler
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds); // Öffnet Schnittstelle
string filter = "ip and tcp"; // Filter für IP und TCP
device.Filter = filter; // Filter dem Gerät zuweisen
device.Capture(); // Start Paketerfassung
Console.WriteLine("-- Angewendeter Filter \"{0}\"",filter);
Console.WriteLine("-- Abhören von Schnittstelle {0}: ",device.Description);
Console.ReadLine();
device.Close();
#endregion
}
private static void device_OnPacketArrival(object sender, CaptureEventArgs packet)
{
DateTime time = packet.Packet.Timeval.Date;
int len = packet.Packet.Data.Length;
Console.WriteLine("{0}:{1}:{2},{3} Len={4}",
time.Hour, time.Minute, time.Second, time.Millisecond, len);
}
}
}
Okay also haben wir das schonmal geklärt.
Jetzt die nächste Frage. Dein aktuelles Problem ist, dass das Event "device_OnPacketArrival" nicht ausgeführt wird?
Wenn ja dann könntest du schauen, ob du das korrekte Device ausgewählt hast mit "Devices[0]", dass du abhören möchtest.
Oder funktioniert nur die Filterung nicht?
Gruß
Das Device ist in Ordnung und es funktioniert nur die Filterung nicht.
Der erste Teil wird auch einwandfrei ausgeführt/dargestellt/angezeigt.
Ich kenne jetzt SharpPcap leider nicht.
Aber der Teil in der Main wird ja nur einmal ausgeführt zur Laufzeit. Du willst vermutlich das er dauerhaft abhört, dann müsste das doch auch ein Event sein, dass immer wenn er Pakete empfängt abfragt, ob es zu dem Filter passt und dann ggf. ausgibt. bzw. in dem bestehenden Event mit integrieren.
Gruß
Werden überhaupt Pakete empfangen?
Also kommt etwas in deinem Programm an, wenn du den Filter weglässt?
Läuft WinPcap? Den Treiber brauchst du um überhaupt etwas zu empfangen.