Hallo,
ich habe ein Programm geschrieben,auf Basis von SharppCap und PacketDotNet, und dieses liest mir Pakete aus dem Netzwerk ein,
nun würde ich gerne HTTP Requests auslesen,,.,..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SharpPcap;
using PacketDotNet;
namespace FBListener2
{
class Program
{
static void Main(string[] args)
{
string ver = SharpPcap.Version.VersionString;
Console.WriteLine("SharpPcap {0}, Example1.IfList.cs", ver);
// Retrieve the device list
LivePcapDeviceList devices = LivePcapDeviceList.Instance;
// If no devices were found print an error
if(devices.Count < 1)
{
Console.WriteLine("No devices were found on this machine");
return;
}
Console.WriteLine("\nThe following devices are available on this machine:");
Console.WriteLine("----------------------------------------------------\n");
// Print out the available network devices
foreach(LivePcapDevice dev in devices)
Console.WriteLine("{0}\n", dev.ToString());
// Extract a device from the list
PcapDevice 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();
device.Mode = CaptureMode.Packets;
device.Filter = "tcp";
Console.WriteLine(
"-- Listening on {0}, hit 'Enter' to stop...",
device.Description);
// Start the capturing process
device.StartCapture();
// Wait for 'Enter' from the user.
Console.ReadLine();
// Stop the capturing process
device.StopCapture();
// Close the pcap device
device.Close();
Console.WriteLine("Fertig");
// Wait for 'Enter' from the user.
Console.ReadLine();
// Wait for 'Enter' from the user.
Console.ReadLine();
}
private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
// DateTime time = packet.Packet.Timeval.Date;
// byte[] xx = packet.Packet.Data;
var packet = PacketDotNet.Packet.ParsePacket(e.Packet);
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
// packetneu.ToString
Console.WriteLine("\nTCP:\n" + enc.GetString(e.Packet.Data));
}
}
}
Hat jemand eine Idee wie ich das machen kann
Den Code bitte direkt im Beitrag einfügen und nicht als Link.
Unsere Website
iPhone Programmierung | Android Programmierung
Hi, dazu musst du die Pakete filtern nach dem Zielport, in dem Fall also TCP/IP Port 80. Die Requests findest du dann im Optimal fall im Inhalt des Paketes. Im schlimmsten Falle jedoch werden die Pakete fragmentiert und du musst mehrere Paket zusammenschustern (basierend auf der Sequenznummer) um das ganze Paket inhaltlich haben zu können.
In dem Fall hilfts ein wenig mal mit Wireshark sich anzugucken, wie http request bzw. allgemein TCP/IP Pakete aufgebaut und übertragen werden.
Gruß
Weiß nicht, ob es das ist, was Du suchst:
private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
var packet = PacketDotNet.Packet.ParsePacket(e.Packet);
if (packet is TcpPacket)
{
//lese Informationen aus
}
}
Du kannst mal bei mir reinschauen. Bei tcp decodieren gibt es einiges zu beachten: die pakete kommen nicht unbedingt in der richtigen reihenfolge an (ist eine häufige folge von packetdrops als geschwindigkeitsregulierung)
HTTPSaver (der quellcode ist ganz unten auf der verlinkten seite)