public TeraSniffer(IpSniffer ipSniffer, ServerDatabase servers) { _serversByIp = servers.GetServersByIp(); if (ipSniffer == null) { var netmasks = _serversByIp.Keys.Select(s => string.Join(".", s.Split('.').Take(3)) + ".0/24").Distinct().ToArray(); string filter = string.Join(" or ", netmasks.Select(x => $"(net {x})")); filter = "tcp and (" + filter + ")"; try { ipSniffer = new IpSnifferWinPcap(filter); } catch { ipSniffer = new IpSnifferRawSocketMultipleInterfaces(); } } _ipSniffer = ipSniffer; var tcpSniffer = new TcpSniffer(_ipSniffer); tcpSniffer.NewConnection += HandleNewConnection; }
public void Initialize() { Task.Factory.StartNew(() => { lock (_snifferLock) { if (_teraSniffer != null) { //dereference the existing sniffer if it exists var sniffer = _teraSniffer; _teraSniffer = null; sniffer.Enabled = false; sniffer.MessageReceived -= HandleMessageReceived; sniffer.NewConnection -= HandleNewConnection; Logger.Info("Sniffer has been disabled."); } IpSniffer ipSniffer = null; if (UseRawSockets) { ipSniffer = new IpSnifferRawSocketMultipleInterfaces(); } _teraSniffer = new TeraSniffer(ipSniffer, BasicTeraData.Servers); _teraSniffer.MessageReceived += HandleMessageReceived; _teraSniffer.NewConnection += HandleNewConnection; _teraSniffer.Enabled = true; Logger.Info("Sniffer has been enabled."); } }, TaskCreationOptions.LongRunning);//provide hint to start on new thread }