コード例 #1
0
        /// <summary>
        /// Initialized the node before simulation.
        /// </summary>
        public override async Task Initialize()
        {
            if (this.port.HasValue)
            {
                this.host = this.domain;
            }
            else
            {
                try
                {
                    SRV SRV = await DnsResolver.LookupServiceEndpoint(this.domain, "xmpp-client", "tcp");

                    if (!(SRV is null) && !string.IsNullOrEmpty(SRV.TargetHost) && SRV.Port > 0)
                    {
                        this.host = SRV.TargetHost;
                        this.port = SRV.Port;
                    }
                }
                catch (Exception)
                {
                    this.host = this.domain;
                    this.port = 5222;
                }
            }

            await base.Initialize();
        }
コード例 #2
0
        public async Task Test_10_Resolve_Service_Endpoints()
        {
            SRV[] Endpoints = await DnsResolver.LookupServiceEndpoints("jabber.org", "xmpp-client", "tcp");

            foreach (SRV SRV in Endpoints)
            {
                Console.Out.WriteLine(SRV.ToString());
            }
        }
コード例 #3
0
 public void Dispose()
 {
     if (!disposed)
     {
         disposed = true;
         Texture.Dispose();
         SRV.Dispose();
     }
 }
コード例 #4
0
 public void Clear()
 {
     if (View != null)
     {
         View.Dispose();
         View = null;
     }
     if (SRV != null)
     {
         SRV.Dispose();
         SRV = null;
     }
 }
コード例 #5
0
        private void Update(EvaluationContext context)
        {
            var srv = SRV.GetValue(context);

            if (srv == null)
            {
                return;
            }

            try
            {
                ElementCount.Value = srv.Description.Buffer.ElementCount;
            }
            catch (Exception e)
            {
                Log.Error("Failed to get SRVProperties: " + e.Message, SymbolChildId);
            }
        }
コード例 #6
0
        public async Task <(string hostName, int port, bool isIpAddress)> LookupXmppHostnameAndPort(string domainName)
        {
            if (IPAddress.TryParse(domainName, out IPAddress _))
            {
                return(domainName, DefaultXmppPortNumber, true);
            }

            try
            {
                SRV endpoint = await DnsResolver.LookupServiceEndpoint(domainName, "xmpp-client", "tcp");

                if (!(endpoint is null) && !string.IsNullOrWhiteSpace(endpoint.TargetHost) && endpoint.Port > 0)
                {
                    return(endpoint.TargetHost, endpoint.Port, false);
                }
            }
            catch (Exception)
            {
                // No service endpoint registered
            }

            return(domainName, DefaultXmppPortNumber, false);
        }
コード例 #7
0
        public async Task Test_09_Resolve_Service_Endpoint()
        {
            SRV Endpoint = await DnsResolver.LookupServiceEndpoint("jabber.org", "xmpp-client", "tcp");

            Console.Out.WriteLine(Endpoint.ToString());
        }
コード例 #8
0
 public void Dispose()
 {
     _data.Dispose();
     SRV.Dispose();
     UAV.Dispose();
 }
コード例 #9
0
        public async Task Test_11_Resolve_Service_Endpoint_3()
        {
            SRV Endpoint = await DnsResolver.LookupServiceEndpoint("cibernotar.io", "xmpp-server", "tcp");

            Console.Out.WriteLine(Endpoint.ToString());
        }
コード例 #10
0
ファイル: Set-DnsRecord.cs プロジェクト: killvxk/DnsShell
        protected override void ProcessRecord()
        {
            this.SetOptions();
            this.SetScope(Server);
            this.SetManagementPath(Identity);
            ManagementObject wmiRecord = this.Get();

            WmiRecordClass WmiRecordClassName = (WmiRecordClass)Enum.Parse(typeof(WmiRecordClass), (String)wmiRecord.Properties["__CLASS"].Value);
            String         NewPath            = String.Empty;

            #region Parameter Set validation
            Boolean Terminate = false;
            switch (ParameterSetName)
            {
            case "PS0": break;

            case "PS1":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_AType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_AAAAType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_WKSType)
                {
                    Terminate = true;
                }
                break;

            case "PS2":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_CNAMEType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MBType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MDType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MFType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_NSType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_PTRType)
                {
                    Terminate = true;
                }
                break;

            case "PS3":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MGType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MRType)
                {
                    Terminate = true;
                }
                break;

            case "PS4":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_TXTType)
                {
                    Terminate = true;
                }
                break;

            case "PS5":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_HINFOType)
                {
                    Terminate = true;
                }
                break;

            case "PS6":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_ISDNType)
                {
                    Terminate = true;
                }
                break;

            case "PS7":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MINFOType)
                {
                    Terminate = true;
                }
                break;

            case "PS8":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_NXTType)
                {
                    Terminate = true;
                }
                break;

            case "PS9":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_RPType)
                {
                    Terminate = true;
                }
                break;

            case "PS10":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_AFSDBType)
                {
                    Terminate = true;
                }
                break;

            case "PS11":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_MXType &
                    WmiRecordClassName != WmiRecordClass.MicrosoftDNS_RTType)
                {
                    Terminate = true;
                }
                break;

            case "PS12":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_X25Type)
                {
                    Terminate = true;
                }
                break;

            case "PS13":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_SOAType)
                {
                    Terminate = true;
                }
                break;

            case "PS14":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_SRVType)
                {
                    Terminate = true;
                }
                break;

            case "PS15":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_WINSType)
                {
                    Terminate = true;
                }
                break;

            case "PS16":
                if (WmiRecordClassName != WmiRecordClass.MicrosoftDNS_WINSRType)
                {
                    Terminate = true;
                }
                break;
            }

            if (Terminate)
            {
                ThrowTerminatingError(
                    new ErrorRecord(
                        new PSInvalidOperationException("InvalidParameterSetForRecordType"),
                        "InvalidOperation",
                        ErrorCategory.InvalidOperation,
                        typeof(ManagementCmdlet)));
            }
            #endregion

            if (ShouldProcess((String)wmiRecord.Properties["TextRepresentation"].Value))
            {
                switch (WmiRecordClassName)
                {
                case WmiRecordClass.MicrosoftDNS_AType:
                    A ARecord = new A(wmiRecord, Server);
                    NewPath = ARecord.Modify(TTL, Address.ToString());
                    break;

                case WmiRecordClass.MicrosoftDNS_AAAAType:
                    AAAA AAAARecord = new AAAA(wmiRecord, Server);
                    NewPath = AAAARecord.Modify(TTL, Address.ToString());
                    break;

                case WmiRecordClass.MicrosoftDNS_AFSDBType:
                    AFSDB AFSDBRecord = new AFSDB(wmiRecord, Server);
                    NewPath = AFSDBRecord.Modify(TTL, SubType, TargetName);
                    break;

                case WmiRecordClass.MicrosoftDNS_CNAMEType:
                    CNAME CNAMERecord = new CNAME(wmiRecord, Server);
                    NewPath = CNAMERecord.Modify(TTL, Hostname);
                    break;

                case WmiRecordClass.MicrosoftDNS_HINFOType:
                    HINFO HINFORecord = new HINFO(wmiRecord, Server);
                    NewPath = HINFORecord.Modify(TTL, CPU, OS);
                    break;

                case WmiRecordClass.MicrosoftDNS_ISDNType:
                    ISDN ISDNRecord = new ISDN(wmiRecord, Server);
                    NewPath = ISDNRecord.Modify(TTL, ISDNNumber, SubAddress);
                    break;

                case WmiRecordClass.MicrosoftDNS_MBType:
                    MB MBRecord = new MB(wmiRecord, Server);
                    NewPath = MBRecord.Modify(TTL, Hostname);
                    break;

                case WmiRecordClass.MicrosoftDNS_MDType:
                    MD MDRecord = new MD(wmiRecord, Server);
                    NewPath = MDRecord.Modify(TTL, Hostname);
                    break;

                case WmiRecordClass.MicrosoftDNS_MFType:
                    MF MFRecord = new MF(wmiRecord, Server);
                    NewPath = MFRecord.Modify(TTL, Hostname);
                    break;

                case WmiRecordClass.MicrosoftDNS_MGType:
                    MG MGRecord = new MG(wmiRecord, Server);
                    NewPath = MGRecord.Modify(TTL, MailboxName);
                    break;

                case WmiRecordClass.MicrosoftDNS_MINFOType:
                    MINFO MINFORecord = new MINFO(wmiRecord, Server);
                    NewPath = MINFORecord.Modify(TTL, ResponsibleMailbox, ErrorMailbox);
                    break;

                case WmiRecordClass.MicrosoftDNS_MRType:
                    MR MRRecord = new MR(wmiRecord, Server);
                    NewPath = MRRecord.Modify(TTL, MailboxName);
                    break;

                case WmiRecordClass.MicrosoftDNS_MXType:
                    MX MXRecord = new MX(wmiRecord, Server);
                    NewPath = MXRecord.Modify(TTL, Preference, TargetName);
                    break;

                case WmiRecordClass.MicrosoftDNS_NSType:
                    NS NSRecord = new NS(wmiRecord, Server);
                    NewPath = NSRecord.Modify(TTL, Hostname);
                    break;

                case WmiRecordClass.MicrosoftDNS_NXTType:
                    NXT NXTRecord = new NXT(wmiRecord, Server);
                    NewPath = NXTRecord.Modify(TTL, NextDomainName, Types);
                    break;

                case WmiRecordClass.MicrosoftDNS_PTRType:
                    PTR PTRRecord = new PTR(wmiRecord, Server);
                    NewPath = PTRRecord.Modify(TTL, Hostname);
                    break;

                case WmiRecordClass.MicrosoftDNS_RPType:
                    RP RPRecord = new RP(wmiRecord, Server);
                    NewPath = RPRecord.Modify(TTL, ResponsibleMailbox, TXTDomainName);
                    break;

                case WmiRecordClass.MicrosoftDNS_RTType:
                    RT RTRecord = new RT(wmiRecord, Server);
                    NewPath = RTRecord.Modify(TTL, Preference, TargetName);
                    break;

                case WmiRecordClass.MicrosoftDNS_SOAType:
                    SOA SOARecord = new SOA(wmiRecord, Server);
                    NewPath = SOARecord.Modify(TTL, SerialNumber,
                                               SOAServer, ResponsibleMailbox, RefreshInterval,
                                               RetryDelay, ExpireLimit, MinimumTTL);
                    break;

                case WmiRecordClass.MicrosoftDNS_SRVType:
                    SRV SRVRecord = new SRV(wmiRecord, Server);
                    NewPath = SRVRecord.Modify(TTL, Priority, Weight, Port, TargetName);
                    break;

                case WmiRecordClass.MicrosoftDNS_TXTType:
                    TXT TXTRecord = new TXT(wmiRecord, Server);
                    NewPath = TXTRecord.Modify(TTL, Text);
                    break;

                case WmiRecordClass.MicrosoftDNS_WINSType:
                    WINS WINSRecord = new WINS(wmiRecord, Server);
                    NewPath = WINSRecord.Modify(TTL, MappingFlag, LookupTimeout,
                                                CacheTimeout, String.Join(" ", WinsServers));
                    break;

                case WmiRecordClass.MicrosoftDNS_WINSRType:
                    WINSR WINSRRecord = new WINSR(wmiRecord, Server);
                    NewPath = WINSRRecord.Modify(TTL, MappingFlag, LookupTimeout,
                                                 CacheTimeout, ResultDomain);
                    break;

                case WmiRecordClass.MicrosoftDNS_WKSType:
                    WKS WKSRecord = new WKS(wmiRecord, Server);
                    NewPath = WKSRecord.Modify(Address, TTL, IPProtocol, String.Join(" ", Services));
                    break;

                case WmiRecordClass.MicrosoftDNS_X25Type:
                    X25 X25Record = new X25(wmiRecord, Server);
                    NewPath = X25Record.Modify(TTL, PSDNAddress);
                    break;

                default:
                    ThrowTerminatingError(
                        new ErrorRecord(
                            new PSNotSupportedException("Unsupported Record Type"),
                            "RecordModificationNotSupported",
                            ErrorCategory.NotImplemented,
                            typeof(ManagementCmdlet)));
                    break;
                }

                if (PassThru)
                {
                    this.SetManagementPath(NewPath);
                    wmiRecord = this.Get();

                    WriteRecord(wmiRecord);
                }
            }
        }
コード例 #11
0
        /// <summary>
        /// Looks up a service endpoint for a domain. If multiple are available,
        /// an appropriate one is selected as defined by RFC 2782.
        /// </summary>
        /// <param name="DomainName">Domain name.</param>
        /// <param name="ServiceName">Service name.</param>
        /// <param name="Protocol">Protocol name. Example: "tcp", "udp", etc.</param>
        /// <returns>Service Endpoint for service.</returns>
        /// <exception cref="IOException">If service endpoint could not be resolved.</exception>
        public static async Task <SRV> LookupServiceEndpoint(string DomainName, string ServiceName, string Protocol)
        {
            string Name = "_" + ServiceName + "._" + Protocol.ToLower() + "." + DomainName;
            SortedDictionary <ushort, List <SRV> > ServicesByPriority = new SortedDictionary <ushort, List <SRV> >();
            List <SRV> SamePriority;

            foreach (ResourceRecord RR in await Resolve(Name, QTYPE.SRV, QCLASS.IN))
            {
                if (RR is SRV SRV)
                {
                    if (!ServicesByPriority.TryGetValue(SRV.Priority, out SamePriority))
                    {
                        SamePriority = new List <SRV>();
                        ServicesByPriority[SRV.Priority] = SamePriority;
                    }

                    SamePriority.Add(SRV);
                }
            }

            while (true)
            {
                ushort?FirstKey = null;

                SamePriority = null;
                foreach (KeyValuePair <ushort, List <SRV> > P in ServicesByPriority)
                {
                    FirstKey     = P.Key;
                    SamePriority = P.Value;
                    break;
                }

                if (!FirstKey.HasValue)
                {
                    throw new IOException("Service Endpoint not found.");
                }

                int TotWeight = 0;
                int i;

                foreach (SRV SRV in SamePriority)
                {
                    TotWeight += SRV.Weight;
                }

                SRV Selected = null;

                if (TotWeight > 0)
                {
                    lock (rnd)
                    {
                        i = rnd.Next(TotWeight);
                    }

                    foreach (SRV SRV in SamePriority)
                    {
                        if (i < SRV.Weight)
                        {
                            Selected = SRV;
                            SamePriority.Remove(SRV);
                            if (SamePriority.Count == 0)
                            {
                                ServicesByPriority.Remove(FirstKey.Value);
                            }
                            break;
                        }
                        else
                        {
                            i -= SRV.Weight;
                        }
                    }
                }

                if (Selected is null)
                {
                    ServicesByPriority.Remove(FirstKey.Value);
                }
                else if (Selected.TargetHost != ".")
                {
                    return(Selected);
                }
            }
        }