static void Main(string[] args) { // You can only create raw sockets with elevated privileges if (!IsElevated()) { Console.WriteLine("Please run with elevated prilileges"); Environment.Exit(1); } var appOptions = ParseCommandLine(args); if (appOptions.ShowHelp) { ShowHelp(appOptions); Environment.Exit(0); } var nics = NetworkInterfaceInfo.GetInterfaces(); if ((!appOptions.InterfaceId.HasValue) || (appOptions.InterfaceId > nics.Count - 1) || (appOptions.InterfaceId < 0)) { Console.WriteLine("Invalid interface ID"); ShowHelp(appOptions); Environment.Exit(3); } var filters = appOptions.BuildFilters(); var nic = nics[appOptions.InterfaceId.Value]; // Start capturing packets var output = new PcapNgFileOutput(nic, appOptions.Filename); var sniffer = new SocketSniffer(nic, filters, output); sniffer.Start(); Console.WriteLine(); Console.WriteLine("Capturing on interface {0} ({1})", nic.Name, nic.IPAddress); Console.WriteLine("Saving to file {0}", appOptions.Filename); Console.WriteLine("Press CTRL+C to stop"); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); // Shutdown gracefully on CTRL+C Console.CancelKeyPress += ConsoleOnCancelKeyPress; while (!isStopping) { Console.SetCursorPosition(0, Console.CursorTop - 2); Console.WriteLine("Packets Observed: {0}", sniffer.PacketsObserved); Console.WriteLine("Packets Captured: {0}", sniffer.PacketsCaptured); Thread.Sleep(200); } sniffer.Stop(); }