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 TeraSniffer(ServerDatabase servers, bool UseRawSockets = false) { _serversByIp = servers.GetServersByIp(); if (UseRawSockets) { _ipSniffer = new IpSnifferRawSocketMultipleInterfaces(); } else { var netmasks = _serversByIp.Keys.Select(s => string.Join(".", s.Split('.').Take(3)) + ".0/24").Distinct().ToArray(); string filter = string.Join(" or ", netmasks.Select(x => string.Format("(net {0})", x))); filter = "tcp and (" + filter + ")"; _ipSniffer = new IpSnifferWinPcap(filter); (_ipSniffer as IpSnifferWinPcap).Warning += OnWarning; } var tcpSniffer = new TcpSniffer(_ipSniffer); tcpSniffer.NewConnection += HandleNewConnection; }