2019-12-08 21:23:54 +01:00
|
|
|
|
using System;
|
|
|
|
|
using System.Net;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
namespace Swan.Net.Dns {
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Represents a DNS record entry.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class DnsRecord {
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Initializes a new instance of the <see cref="DnsRecord"/> class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="record">The record.</param>
|
|
|
|
|
internal DnsRecord(DnsClient.IDnsResourceRecord record) : this() {
|
|
|
|
|
this.Name = record.Name.ToString();
|
|
|
|
|
this.Type = record.Type;
|
|
|
|
|
this.Class = record.Class;
|
|
|
|
|
this.TimeToLive = record.TimeToLive;
|
|
|
|
|
this.Data = record.Data;
|
|
|
|
|
|
|
|
|
|
// PTR
|
|
|
|
|
this.PointerDomainName = (record as DnsClient.DnsPointerResourceRecord)?.PointerDomainName?.ToString();
|
|
|
|
|
|
|
|
|
|
// A
|
|
|
|
|
this.IPAddress = (record as DnsClient.DnsIPAddressResourceRecord)?.IPAddress;
|
|
|
|
|
|
|
|
|
|
// NS
|
|
|
|
|
this.NameServerDomainName = (record as DnsClient.DnsNameServerResourceRecord)?.NSDomainName?.ToString();
|
|
|
|
|
|
|
|
|
|
// CNAME
|
|
|
|
|
this.CanonicalDomainName = (record as DnsClient.DnsCanonicalNameResourceRecord)?.CanonicalDomainName.ToString();
|
|
|
|
|
|
|
|
|
|
// MX
|
|
|
|
|
this.MailExchangerDomainName = (record as DnsClient.DnsMailExchangeResourceRecord)?.ExchangeDomainName.ToString();
|
|
|
|
|
this.MailExchangerPreference = (record as DnsClient.DnsMailExchangeResourceRecord)?.Preference;
|
|
|
|
|
|
|
|
|
|
// SOA
|
|
|
|
|
this.SoaMasterDomainName = (record as DnsClient.DnsStartOfAuthorityResourceRecord)?.MasterDomainName.ToString();
|
|
|
|
|
this.SoaResponsibleDomainName = (record as DnsClient.DnsStartOfAuthorityResourceRecord)?.ResponsibleDomainName.ToString();
|
|
|
|
|
this.SoaSerialNumber = (record as DnsClient.DnsStartOfAuthorityResourceRecord)?.SerialNumber;
|
|
|
|
|
this.SoaRefreshInterval = (record as DnsClient.DnsStartOfAuthorityResourceRecord)?.RefreshInterval;
|
|
|
|
|
this.SoaRetryInterval = (record as DnsClient.DnsStartOfAuthorityResourceRecord)?.RetryInterval;
|
|
|
|
|
this.SoaExpireInterval = (record as DnsClient.DnsStartOfAuthorityResourceRecord)?.ExpireInterval;
|
|
|
|
|
this.SoaMinimumTimeToLive = (record as DnsClient.DnsStartOfAuthorityResourceRecord)?.MinimumTimeToLive;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private DnsRecord() {
|
|
|
|
|
// placeholder
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the name.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The name.
|
|
|
|
|
/// </value>
|
|
|
|
|
public String Name {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the type.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The type.
|
|
|
|
|
/// </value>
|
|
|
|
|
public DnsRecordType Type {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the class.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The class.
|
|
|
|
|
/// </value>
|
|
|
|
|
public DnsRecordClass Class {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the time to live.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The time to live.
|
|
|
|
|
/// </value>
|
|
|
|
|
public TimeSpan TimeToLive {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the raw data of the record.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The data.
|
|
|
|
|
/// </value>
|
|
|
|
|
public Byte[] Data {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the data text bytes in ASCII encoding.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The data text.
|
|
|
|
|
/// </value>
|
|
|
|
|
public String DataText => this.Data == null ? String.Empty : Encoding.ASCII.GetString(this.Data);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the name of the pointer domain.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The name of the pointer domain.
|
|
|
|
|
/// </value>
|
|
|
|
|
public String PointerDomainName {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the ip address.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The ip address.
|
|
|
|
|
/// </value>
|
|
|
|
|
public IPAddress IPAddress {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the name of the name server domain.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The name of the name server domain.
|
|
|
|
|
/// </value>
|
|
|
|
|
public String NameServerDomainName {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the name of the canonical domain.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The name of the canonical domain.
|
|
|
|
|
/// </value>
|
|
|
|
|
public String CanonicalDomainName {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the mail exchanger preference.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The mail exchanger preference.
|
|
|
|
|
/// </value>
|
|
|
|
|
public Int32? MailExchangerPreference {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the name of the mail exchanger domain.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The name of the mail exchanger domain.
|
|
|
|
|
/// </value>
|
|
|
|
|
public String MailExchangerDomainName {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the name of the soa master domain.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The name of the soa master domain.
|
|
|
|
|
/// </value>
|
|
|
|
|
public String SoaMasterDomainName {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the name of the soa responsible domain.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The name of the soa responsible domain.
|
|
|
|
|
/// </value>
|
|
|
|
|
public String SoaResponsibleDomainName {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the soa serial number.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The soa serial number.
|
|
|
|
|
/// </value>
|
|
|
|
|
public Int64? SoaSerialNumber {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the soa refresh interval.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The soa refresh interval.
|
|
|
|
|
/// </value>
|
|
|
|
|
public TimeSpan? SoaRefreshInterval {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the soa retry interval.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The soa retry interval.
|
|
|
|
|
/// </value>
|
|
|
|
|
public TimeSpan? SoaRetryInterval {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the soa expire interval.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The soa expire interval.
|
|
|
|
|
/// </value>
|
|
|
|
|
public TimeSpan? SoaExpireInterval {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the soa minimum time to live.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>
|
|
|
|
|
/// The soa minimum time to live.
|
|
|
|
|
/// </value>
|
|
|
|
|
public TimeSpan? SoaMinimumTimeToLive {
|
|
|
|
|
get;
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-12-04 18:57:18 +01:00
|
|
|
|
}
|