示例#1
0
        private void OnHostName(IPAddress remoteAddress, string hostName, NameSources source, int processId = 0)
        {
            CloneableList <HostObserveJob> Jobs = ObserverJobs.GetValues(remoteAddress, false);

            if (Jobs == null)
            {
                return;
            }

            foreach (HostObserveJob curJob in Jobs.Clone())
            {
                if (processId == 0 || curJob.processId == processId)
                {
                    if (hostName != null)
                    {
                        curJob.SetHostName(hostName, source);
                    }
                    curJob.Await &= ~source; // clear the await
                }

                if (!curJob.IsValid())
                {
                    ObserverJobs.Remove(remoteAddress, curJob);
                }
            }
        }
示例#2
0
            public void SetHostName(string hostName, NameSources source)
            {
                object obj = target.Target;

                if (obj != null)
                {
                    setter(obj, hostName, source);
                }
            }
示例#3
0
 public bool Update(WithHost other)
 {
     if (MiscFunc.Equals(RemoteHostName, other.RemoteHostName))
     {
         return(false);
     }
     RemoteHostNameSource = other.RemoteHostNameSource;
     RemoteHostName       = other.RemoteHostName;
     return(true);
 }
示例#4
0
 public bool Update(WithHost other)
 {
     if (RemoteHostName != null && other.RemoteHostName != null && RemoteHostName.Equals(other.RemoteHostName))
     {
         return(false);
     }
     RemoteHostNameSource = other.RemoteHostNameSource;
     RemoteHostName       = other.RemoteHostName;
     return(true);
 }
示例#5
0
        public void UpdateHostName(string name, NameSources source)
        {
            if (source > RemoteHostNameSource) // the bigger the better
            {
                if (RemoteHostNameSource == NameSources.CachedQuery && !RemoteHostName.Equals(name, StringComparison.OrdinalIgnoreCase))
                {
                    RemoteHostNameAlias = RemoteHostName;
                }

                string oldName = RemoteHostName;

                RemoteHostName       = name;
                RemoteHostNameSource = source;

                if (oldName == null || !oldName.Equals(name))
                {
                    HostNameChanged?.Invoke(this, new ChangeEventArgs()
                    {
                        oldName = oldName, HostName = name
                    });
                }
            }
        }
示例#6
0
        public void GetHostName(int processId, IPAddress remoteAddress, object target, Action <object, string, NameSources> setter)
        {
            // sanity check
            if (remoteAddress.Equals(IPAddress.Any) || remoteAddress.Equals(IPAddress.IPv6Any))
            {
                return;
            }
            if (remoteAddress.Equals(IPAddress.Loopback) || remoteAddress.Equals(IPAddress.IPv6Loopback))
            {
                setter(target, "localhost", NameSources.ReverseDns);
                return;
            }
            if (NetFunc.IsMultiCast(remoteAddress))
            {
                setter(target, "multicast.arpa", NameSources.ReverseDns);
                return;
            }

            NameSources Await = NameSources.None;

            if (queryWatcher.IsActive())
            {
                string capturedName = FindMostRecentHost(queryWatcher.FindHostNames(processId, remoteAddress));
                if (capturedName == null)
                {
                    Await |= NameSources.CapturedQuery;
                }
                else
                {
                    setter(target, capturedName, NameSources.CapturedQuery);
                }
            }

            if (Await != NameSources.None)
            {
                string cachedName = FindMostRecentHost(dnsCacheMonitor.FindHostNames(remoteAddress));
                if (cachedName == null)
                {
                    Await |= NameSources.CachedQuery;
                }
                else
                {
                    setter(target, cachedName, NameSources.CachedQuery);
                }
            }

            int ReverseResolve = App.GetConfigInt("DnsInspector", "UseReverseDNS", 0);

            if (ReverseResolve == 2 || (ReverseResolve == 1 && (Await & NameSources.CachedQuery) != 0))
            {
                string resolvedName = FindMostRecentHost(hostNameResolver.ResolveHostNames(remoteAddress));
                if (resolvedName == null)
                {
                    Await |= NameSources.ReverseDns;
                }
                else
                {
                    setter(target, resolvedName, NameSources.ReverseDns);
                }
            }

            if (Await != NameSources.None)
            {
                HostObserveJob job = new HostObserveJob()
                {
                    target = new WeakReference(target), setter = setter, processId = processId, remoteAddress = remoteAddress, Await = Await, timeOut = DateTime.Now.AddSeconds(30)
                };
                ObserverJobs.Add(remoteAddress, job);
            }
        }