using PacketDotNet.Connections;
using PacketDotNet.Connections.Http;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace HttpMonitorExample
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private static TcpConnectionManager tcpConnectionManager = new TcpConnectionManager();
public static void Main(string[] args)
var ver = SharpPcap.Pcap.SharpPcapVersion;
Console.WriteLine("SharpPcap {0}", ver);
var devices = SharpPcap.LibPcap.LibPcapLiveDeviceList.Instance;
Console.WriteLine("No devices were found on this machine");
Console.WriteLine("The following devices are available on this machine:");
Console.WriteLine("----------------------------------------------------");
foreach (SharpPcap.LibPcap.LibPcapLiveDevice dev in devices)
Console.WriteLine("{0}) {1} {2}", i, dev.Name, dev.Description);
Console.Write("-- Please choose a device to capture: ");
i = int.Parse(Console.ReadLine());
ICaptureDevice device = devices[i];
tcpConnectionManager.OnConnectionFound += HandleTcpConnectionManagerOnConnectionFound;
device.OnPacketArrival +=
new PacketArrivalEventHandler(device_OnPacketArrival);
int readTimeoutMilliseconds = 1000;
device.Open(DeviceModes.Promiscuous, readTimeoutMilliseconds);
Console.WriteLine("-- Listening on {0} {1}, hit 'Enter' to stop...",
device.Name, device.Description);
Console.WriteLine("-- Capture stopped.");
static void HandleTcpConnectionManagerOnConnectionFound (TcpConnection c)
var httpSessionWatcher = new HttpSessionWatcher(c,
private static void device_OnPacketArrival(object sender, PacketCapture e)
var time = e.Packet.Timeval.Date;
var len = e.Packet.Data.Length;
Console.WriteLine("{0}:{1}:{2},{3} Len={4}",
time.Hour, time.Minute, time.Second, time.Millisecond, len);
Console.WriteLine(e.Packet.ToString());
var rawPacket = e.GetPacket();
var p = PacketDotNet.Packet.ParsePacket(rawPacket.LinkLayerType, rawPacket.Data);
var tcpPacket = p.Extract<TcpPacket>();
log.Debug("passing packet to TcpConnectionManager");
tcpConnectionManager.ProcessPacket(rawPacket.Timeval,
private static void OnHttpRequestFound(HttpSessionWatcherRequestEventArgs e)
if((e.Request.ContentEncoding == HttpMessage.ContentEncodings.Deflate) ||
(e.Request.ContentEncoding == HttpMessage.ContentEncodings.Gzip))
Console.WriteLine(e.Request.ToString());
private static void OnHttpStatusFound(HttpSessionWatcherStatusEventArgs e)
if((e.Status.ContentEncoding == HttpMessage.ContentEncodings.Deflate) ||
(e.Status.ContentEncoding == HttpMessage.ContentEncodings.Gzip))
Console.WriteLine(e.Status.ToString());
private static void OnHttpWatcherError(string errorString)
log.Error("errorString " + errorString);