public static void PacketCounter() { Console.WriteLine("Counter started..."); while (true) { Thread.Sleep(100); foreach (int count in hwCount.ToList()) { if (count > 20) { if (!hasAlerted) { Console.WriteLine("\nWARNING"); Console.WriteLine("\t" + hwList[hwCount.IndexOf(count)] + " seems to be attempting to wipe the network cache."); Console.WriteLine("\tHas " + count + " packets sent with same hardware address"); Console.WriteLine("Flushing and Freezing..."); int id = AdapterController.GetAdapterId(adapterId); string gateway = AdapterController.GetGateway(); CacheController.FlushFreezeArp(id, AdapterController.GetGateway()); hasAlerted = true; Console.WriteLine(); } } } } }
static void Main(string[] args) { // New cache controller. byte[] router = CacheController.GetCachedAddress("10.0.0.1"); Console.WriteLine(AdapterController.GetGateway()); // Make sure we got something. // Byte array length should be the same as a mac address length in bytes. if (router != null) { Console.WriteLine(BytesToString(router)); } else { Console.WriteLine("Router has no cached address?"); } // Get device list from local machine IList <LivePacketDevice> allDevices; try { allDevices = LivePacketDevice.AllLocalMachine; } catch (InvalidOperationException e) { Console.WriteLine(e.Message); allDevices = new List <LivePacketDevice>(); } if (allDevices.Count == 0) { Console.WriteLine("No interfaces found. Make sure libpcap/WinPcap is properly installed on the local machine."); return; } // Print the list Console.WriteLine("\nInterface Device List:"); for (int i = 0; i != allDevices.Count; i++) { LivePacketDevice device = allDevices[i]; Console.Write((i + 1) + ". " + device.Name + " " + string.Join(", ", device.Addresses)); if (args.Length > 0) { if (args[0] == "-d") { DevicePrint(allDevices[i]); } } if (device.Description != null) { Console.WriteLine(" (" + device.Description + ")"); } else { Console.WriteLine(" (No description available)"); } } int deviceIndex = 0; do { Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):"); string deviceIndexString = Console.ReadLine(); if (!int.TryParse(deviceIndexString, out deviceIndex) || deviceIndex < 1 || deviceIndex > allDevices.Count) { deviceIndex = 0; } } while (deviceIndex == 0); ThreadStart childref = new ThreadStart(PacketCounter); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); // Take the selected adapter PacketDevice selectedDevice = allDevices[deviceIndex - 1]; adapterId = selectedDevice.Name.Split('_')[1]; // open the device using (PacketCommunicator communicator = selectedDevice.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000)) { Console.WriteLine("Listening on " + selectedDevice.Description + "..."); // Start the capture communicator.SetFilter("arp"); communicator.ReceivePackets(0, PacketHandlerArp); } }