private SnifferSettings LoadSettings(SnifferSettings settings, ICaptureDevice device) { if (device != null && _settings.filter != null && device.Filter != settings.filter) { device.StopCapture(); device.Filter = settings.filter; device.StartCapture(); } return(settings); }
private void Run() { var settingsFileName = $"{AppDomain.CurrentDomain.FriendlyName}.json"; _settings = LoadSettings(settingsFileName); WinPcapDevice device = null; var devices = WinPcapDeviceList.Instance.Where(x => x.Addresses.Any(address => address.Addr.sa_family == AF_INET)).ToList(); if (_settings.DeviceIp.Equals(IPAddress.None)) { var i = 0; foreach (var dev in devices) { Console.WriteLine($"{i++}) {dev.Interface.FriendlyName} {dev.Description} ({string.Join(", ", dev.Addresses.Where(x => x.Addr.ipAddress != null).Select(x => x.Addr.ipAddress))})"); } i = int.Parse(Console.ReadLine()); device = devices[i]; } else { foreach (var dev in devices) { var address = GetIPV4SockAddr(dev); if (address.Addr.ipAddress.Equals(_settings.DeviceIp)) { device = dev; Console.WriteLine($"Found device for {address.Addr.ipAddress}!"); break; } } if (device == null) { Console.WriteLine($"Couldn't find device with address {_settings.deviceIp}."); return; } } if (device == null) { Console.WriteLine("Couldn't find specified device"); return; } device.OnPacketArrival += device_OnPacketArrival; Console.WriteLine($"opening {device.Interface.FriendlyName}"); device.Open(DeviceMode.Promiscuous, 1000); LoadSettings(_settings, device); //todo add more commands, packetwatches esp. var input = Console.ReadLine(); while (input != "quit") { var command = input.Split(" ")[0].ToLower(); var args = input.Split(" ").Skip(1).ToArray(); var rest = String.Join(" ", args); switch (command) { case "filter": _settings.filter = rest; LoadSettings(_settings, device); break; case "load": case "reload": var fileName = !string.IsNullOrEmpty(rest) ? rest : settingsFileName; _settings = LoadSettings(fileName); Console.WriteLine($"Settings loaded from {fileName}!"); break; case "save": SaveSettings(settingsFileName, _settings); Console.WriteLine($"Settings saved to {settingsFileName}!"); break; } if (_settings.autoSave) { SaveSettings(settingsFileName, _settings); } input = Console.ReadLine(); } }
private void SaveSettings(string fileName, SnifferSettings settings) { var jsonSettings = JsonConvert.SerializeObject(_settings, Formatting.Indented); File.WriteAllText(fileName, jsonSettings); }