Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 3
0
        private void SaveSettings(string fileName, SnifferSettings settings)
        {
            var jsonSettings = JsonConvert.SerializeObject(_settings, Formatting.Indented);

            File.WriteAllText(fileName, jsonSettings);
        }