Folder structure reconstruction
This commit is contained in:
83
MailServer/DNSClient/Records/ARecord.cs
Normal file
83
MailServer/DNSClient/Records/ARecord.cs
Normal file
@ -0,0 +1,83 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
/// <summary>
|
||||
/// RFC 1035:
|
||||
///
|
||||
/// 3.4.1. A RDATA format
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | ADDRESS |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
///
|
||||
/// where:
|
||||
///
|
||||
/// ADDRESS A 32 bit Internet address.
|
||||
///
|
||||
/// Hosts that have multiple Internet addresses will have multiple A
|
||||
/// records.
|
||||
///
|
||||
/// A records cause no additional section processing. The RDATA section of
|
||||
/// an A line in a master file is an Internet address expressed as four
|
||||
/// decimal numbers separated by dots without any imbedded spaces (e.g.,
|
||||
/// "10.2.0.52" or "192.0.5.6").
|
||||
///
|
||||
/// </summary>
|
||||
public sealed class ARecord : DnsRecordBase, IDnsRecord
|
||||
{
|
||||
private string _hostAddress;
|
||||
|
||||
/// <summary>
|
||||
/// The answer host address for the DNS A Record.
|
||||
/// </summary>
|
||||
public string HostAddress
|
||||
{
|
||||
get { return _hostAddress; }
|
||||
}
|
||||
|
||||
internal ARecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
_hostAddress = ms.ReadByte() + "." + ms.ReadByte() + "." + ms.ReadByte() + "." + ms.ReadByte();
|
||||
_answer = "Address: " + _hostAddress;
|
||||
}
|
||||
}
|
||||
}
|
97
MailServer/DNSClient/Records/AaaaRecord.cs
Normal file
97
MailServer/DNSClient/Records/AaaaRecord.cs
Normal file
@ -0,0 +1,97 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class AaaaRecord : DnsRecordBase
|
||||
{
|
||||
private string m_ipAddress;
|
||||
|
||||
internal AaaaRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
// TODO: Test and incorporate BinToHex function below
|
||||
m_ipAddress =
|
||||
ms.ReadByte().ToString("x2") + ms.ReadByte().ToString("x2") + ":" + ms.ReadByte().ToString("x2") + ms.ReadByte().ToString("x2") + ":" +
|
||||
ms.ReadByte().ToString("x2") + ms.ReadByte().ToString("x2") + ":" + ms.ReadByte().ToString("x2") + ms.ReadByte().ToString("x2") + ":" +
|
||||
ms.ReadByte().ToString("x2") + ms.ReadByte().ToString("x2") + ":" + ms.ReadByte().ToString("x2") + ms.ReadByte().ToString("x2") + ":" +
|
||||
ms.ReadByte().ToString("x2") + ms.ReadByte().ToString("x2") + ":" + ms.ReadByte().ToString("x2") + ms.ReadByte().ToString("x2");
|
||||
_answer = "IPv6 Address: " + m_ipAddress;
|
||||
}
|
||||
|
||||
// TODO: converted from VB.NET, test to make sure it works properly
|
||||
private static string BinToHex(byte[] data)
|
||||
{
|
||||
if (data != null)
|
||||
{
|
||||
StringBuilder sb = new System.Text.StringBuilder(1024);
|
||||
for (int i = 0; i < data.Length; i++)
|
||||
{
|
||||
sb.Append(data[i].ToString("X2"));
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: converted from VB.NET, test to make sure it works properly
|
||||
private static byte[] HexToBin(string s)
|
||||
{
|
||||
int arraySize = s.Length / 2;
|
||||
byte[] bytes = new byte[arraySize - 1];
|
||||
int counter = 0;
|
||||
|
||||
for (int i = 0; i < s.Length - 1; i = 2)
|
||||
{
|
||||
string hexValue = s.Substring(i, 2);
|
||||
|
||||
// Tell convert to interpret the string as a 16 bit hex value
|
||||
int intValue = Convert.ToInt32(hexValue, 16);
|
||||
// Convert the integer to a byte and store it in the array
|
||||
bytes[counter] = Convert.ToByte(intValue);
|
||||
counter += 1;
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
}
|
||||
}
|
78
MailServer/DNSClient/Records/AfsdbRecord.cs
Normal file
78
MailServer/DNSClient/Records/AfsdbRecord.cs
Normal file
@ -0,0 +1,78 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class AfsdbRecord : DnsRecordBase
|
||||
{
|
||||
private ushort _port;
|
||||
private string _name;
|
||||
private short _type;
|
||||
|
||||
public ushort Port
|
||||
{
|
||||
get { return _port; }
|
||||
}
|
||||
|
||||
public string AfsdbName
|
||||
{
|
||||
get { return _name; }
|
||||
}
|
||||
|
||||
public short Type
|
||||
{
|
||||
get { return _type; }
|
||||
}
|
||||
|
||||
internal AfsdbRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
byte[] type = new byte[2];
|
||||
ms.Read(type, 0, 2);
|
||||
// _port = (ushort)Tools.ByteToUInt(type);
|
||||
_port = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(type, 0));
|
||||
_name = DnsRecordBase.ParseName(ref ms);
|
||||
//_type = (short)Tools.ByteToUInt(type);
|
||||
_type = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(type, 0));
|
||||
_answer = "Name: " + _name + ", Port: " + _port + ", Type: " + _type;
|
||||
}
|
||||
}
|
||||
}
|
74
MailServer/DNSClient/Records/AtmaRecord.cs
Normal file
74
MailServer/DNSClient/Records/AtmaRecord.cs
Normal file
@ -0,0 +1,74 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class AtmaRecord : DnsRecordBase
|
||||
{
|
||||
private string _address;
|
||||
private ATMFormat _format;
|
||||
|
||||
public string Address
|
||||
{
|
||||
get { return _address; }
|
||||
}
|
||||
|
||||
public ATMFormat Format
|
||||
{
|
||||
get { return _format; }
|
||||
}
|
||||
|
||||
internal AtmaRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
byte[] address = new byte[this.DnsHeader.DataLength - 1];
|
||||
_format = (ATMFormat)ms.ReadByte();
|
||||
ms.Read(address, 0, this.DnsHeader.DataLength - 1);
|
||||
_address = Encoding.ASCII.GetString(address);
|
||||
_answer = "Address: " + _address + ", Format: " + _format;
|
||||
}
|
||||
|
||||
public enum ATMFormat : byte
|
||||
{
|
||||
E164 = 0x01,
|
||||
NSAP = 0x02
|
||||
}
|
||||
}
|
||||
}
|
346
MailServer/DNSClient/Records/BaseDnsRecord.cs
Normal file
346
MailServer/DNSClient/Records/BaseDnsRecord.cs
Normal file
@ -0,0 +1,346 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
/// <summary>
|
||||
/// Handles a basic Dns record
|
||||
///
|
||||
/// From RFC 1035:
|
||||
///
|
||||
/// 3.2.1. Format
|
||||
///
|
||||
/// All RRs have the same top level format shown below:
|
||||
///
|
||||
/// 1 1 1 1 1 1
|
||||
/// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | |
|
||||
/// / /
|
||||
/// / NAME /
|
||||
/// | |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | TYPE |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | CLASS |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | TTL |
|
||||
/// | |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | RDLENGTH |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
|
||||
/// / RDATA /
|
||||
/// / /
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
///
|
||||
/// where:
|
||||
///
|
||||
/// NAME an owner name, i.e., the name of the node to which this
|
||||
/// resource record pertains.
|
||||
///
|
||||
/// TYPE two octets containing one of the RR TYPE codes.
|
||||
///
|
||||
/// CLASS two octets containing one of the RR CLASS codes.
|
||||
///
|
||||
/// TTL a 32 bit signed integer that specifies the time interval
|
||||
/// that the resource record may be cached before the source
|
||||
/// of the information should again be consulted. Zero
|
||||
/// values are interpreted to mean that the RR can only be
|
||||
/// used for the transaction in progress, and should not be
|
||||
/// cached. For example, SOA records are always distributed
|
||||
/// with a zero TTL to prohibit caching. Zero values can
|
||||
/// also be used for extremely volatile data.
|
||||
///
|
||||
/// RDLENGTH an unsigned 16 bit integer that specifies the length in
|
||||
/// octets of the RDATA field.
|
||||
///
|
||||
/// RDATA a variable length string of octets that describes the
|
||||
/// resource. The format of this information varies
|
||||
/// according to the TYPE and CLASS of the resource record.
|
||||
/// </summary>
|
||||
public abstract class DnsRecordBase : IDnsRecord
|
||||
{
|
||||
#region Fields
|
||||
// NAME an owner name, i.e., the name of the node to which this
|
||||
// resource record pertains.
|
||||
//private string _name;
|
||||
// TYPE two octets containing one of the RR TYPE codes.
|
||||
//protected NsType _nsType;
|
||||
// CLASS - two octets containing one of the RR CLASS codes.
|
||||
//private NsClass _nsClass;
|
||||
// TTL - a 32 bit signed integer that specifies the time interval
|
||||
// that the resource record may be cached before the source
|
||||
// of the information should again be consulted. Zero
|
||||
// values are interpreted to mean that the RR can only be
|
||||
// used for the transaction in progress, and should not be
|
||||
// cached. For example, SOA records are always distributed
|
||||
// with a zero TTL to prohibit caching. Zero values can
|
||||
/// also be used for extremely volatile data.
|
||||
//private int _timeToLive;
|
||||
// RDLENGTH - an unsigned 16 bit integer that specifies the length in
|
||||
// octets of the RDATA field.
|
||||
//protected short _dataLength;
|
||||
protected RecordHeader _dnsHeader;
|
||||
protected string _answer;
|
||||
protected string _errorMsg;
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
/// <summary>
|
||||
/// NAME - an owner name, i.e., the name of the node to which this
|
||||
/// resource record pertains.
|
||||
/// </summary>
|
||||
//public string Name
|
||||
//{
|
||||
// get { return _name; }
|
||||
//}
|
||||
|
||||
public RecordHeader DnsHeader
|
||||
{
|
||||
get { return _dnsHeader; }
|
||||
protected set { _dnsHeader = value; }
|
||||
}
|
||||
|
||||
public string Answer
|
||||
{
|
||||
get { return _answer; }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// TYPE two octets containing one of the RR TYPE codes.
|
||||
/// </summary>
|
||||
//public NsType NsType
|
||||
//{
|
||||
// get { return _nsType; }
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// CLASS - two octets containing one of the RR CLASS codes.
|
||||
/// </summary>
|
||||
//public NsClass NsClass
|
||||
//{
|
||||
// get { return _nsClass; }
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// TTL - a 32 bit signed integer that specifies the time interval
|
||||
/// that the resource record may be cached before the source
|
||||
/// of the information should again be consulted. Zero
|
||||
/// values are interpreted to mean that the RR can only be
|
||||
/// used for the transaction in progress, and should not be
|
||||
/// cached. For example, SOA records are always distributed
|
||||
/// with a zero TTL to prohibit caching. Zero values can
|
||||
/// also be used for extremely volatile data.
|
||||
/// </summary>
|
||||
//public int TimeToLive
|
||||
//{
|
||||
// get { return _timeToLive; }
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// RDLENGTH - an unsigned 16 bit integer that specifies the length in
|
||||
/// octets of the RDATA field.
|
||||
/// </summary>
|
||||
//public short DataLength
|
||||
//{
|
||||
// get { return _dataLength; }
|
||||
//}
|
||||
|
||||
public string ErrorMsg
|
||||
{
|
||||
get { return _errorMsg; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
internal DnsRecordBase()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
// Default implementation - the most common.
|
||||
_answer = DnsRecordBase.ParseName(ref ms);
|
||||
}
|
||||
|
||||
internal DnsRecordBase(RecordHeader dnsHeader)
|
||||
{
|
||||
_dnsHeader = dnsHeader;
|
||||
}
|
||||
|
||||
// RFC
|
||||
// 4.1.4. Message compression
|
||||
//
|
||||
// In order to reduce the size of messages, the domain system utilizes a
|
||||
// compression scheme which eliminates the repetition of domain names in a
|
||||
// message. In this scheme, an entire domain name or a list of labels at
|
||||
// the end of a domain name is replaced with a pointer to a prior occurance
|
||||
// of the same name.
|
||||
//
|
||||
// The pointer takes the form of a two octet sequence:
|
||||
//
|
||||
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
// | 1 1| OFFSET |
|
||||
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
//
|
||||
// The first two bits are ones. This allows a pointer to be distinguished
|
||||
// from a label, since the label must begin with two zero bits because
|
||||
// labels are restricted to 63 octets or less. (The 10 and 01 combinations
|
||||
// are reserved for future use.) The OFFSET field specifies an offset from
|
||||
// the start of the message (i.e., the first octet of the ID field in the
|
||||
// domain header). A zero offset specifies the first byte of the ID field,
|
||||
// etc.
|
||||
//
|
||||
// The compression scheme allows a domain name in a message to be
|
||||
// represented as either:
|
||||
//
|
||||
// - a sequence of labels ending in a zero octet
|
||||
// - a pointer
|
||||
// - a sequence of labels ending with a pointer
|
||||
//
|
||||
|
||||
internal static string ParseName(ref MemoryStream ms)
|
||||
{
|
||||
Trace.WriteLine("Reading Name...");
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
uint next = (uint)ms.ReadByte();
|
||||
Trace.WriteLine("Next is 0x" + next.ToString("x2"));
|
||||
int bPointer;
|
||||
|
||||
while ((next != 0x00))
|
||||
{
|
||||
// Isolate 2 most significat bits -> e.g. 11xx xxxx
|
||||
// if it's 0xc0 (11000000b} then pointer
|
||||
switch (0xc0 & next)
|
||||
{
|
||||
// 0xc0 -> Name is a pointer.
|
||||
case 0xc0:
|
||||
{
|
||||
// Isolate Offset
|
||||
int offsetMASK = ~0xc0;
|
||||
|
||||
// Example on how to calculate the offset
|
||||
// e.g.
|
||||
//
|
||||
// So if given the following 2 bytes - 0xc1 0x1c (11000001 00011100)
|
||||
//
|
||||
// The pointer takes the form of a two octet sequence:
|
||||
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
// | 1 1| OFFSET |
|
||||
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
// | 1 1| 0 0 0 0 0 1 0 0 0 1 1 1 0 0|
|
||||
// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
//
|
||||
// A pointer is indicated by the a 1 in the two most significant bits
|
||||
// The Offset is the remaining bits.
|
||||
//
|
||||
// The Pointer = 0xc0 (11000000 00000000)
|
||||
// The offset = 0x11c (00000001 00011100)
|
||||
|
||||
// Move offset into the proper position
|
||||
int offset = (int)(offsetMASK & next) << 8;
|
||||
|
||||
// extract the pointer to the data in the stream
|
||||
bPointer = ms.ReadByte() + offset;
|
||||
// store the position so we can resume later
|
||||
long oldPtr = ms.Position;
|
||||
// Move to the specified position in the stream and
|
||||
// parse the name (recursive call)
|
||||
ms.Position = bPointer;
|
||||
sb.Append(DnsRecordBase.ParseName(ref ms));
|
||||
Trace.WriteLine(sb.ToString());
|
||||
// Move back to original position, and continue
|
||||
ms.Position = oldPtr;
|
||||
next = 0x00;
|
||||
break;
|
||||
}
|
||||
case 0x00:
|
||||
{
|
||||
Debug.Assert(next < 0xc0, "Offset cannot be greater then 0xc0.");
|
||||
byte[] buffer = new byte[next];
|
||||
ms.Read(buffer, 0, (int)next);
|
||||
sb.Append(Encoding.ASCII.GetString(buffer) + ".");
|
||||
next = (uint)ms.ReadByte();
|
||||
Trace.WriteLine("0x" + next.ToString("x2"));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new InvalidOperationException("There was a problem decompressing the DNS Message.");
|
||||
}
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
internal string ParseText(ref MemoryStream ms)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int len = ms.ReadByte();
|
||||
byte[] buffer = new byte[len];
|
||||
ms.Read(buffer, 0, len);
|
||||
sb.Append(Encoding.ASCII.GetString(buffer));
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return _answer;
|
||||
}
|
||||
|
||||
#region IDnsRecord Members
|
||||
|
||||
public virtual byte[] GetMessageBytes()
|
||||
{
|
||||
return new byte[]{};
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
internal class Trace
|
||||
{
|
||||
public static void WriteLine(string message)
|
||||
{
|
||||
Logging.AddLogMessage(Logging.LoggingType.INFO, message);
|
||||
}
|
||||
}
|
||||
}
|
52
MailServer/DNSClient/Records/CNameRecord.cs
Normal file
52
MailServer/DNSClient/Records/CNameRecord.cs
Normal file
@ -0,0 +1,52 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class CNameRecord : DnsRecordBase
|
||||
{
|
||||
internal CNameRecord(RecordHeader dnsHeader) : base(dnsHeader) {}
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
base.ParseRecord(ref ms);
|
||||
_answer = "Host: " + _answer;
|
||||
}
|
||||
}
|
||||
}
|
67
MailServer/DNSClient/Records/HInfoRecord.cs
Normal file
67
MailServer/DNSClient/Records/HInfoRecord.cs
Normal file
@ -0,0 +1,67 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class HInfoRecord : DnsRecordBase
|
||||
{
|
||||
private string _cpuType;
|
||||
private string _operatingSys;
|
||||
|
||||
public string CpuType
|
||||
{
|
||||
get { return _cpuType; }
|
||||
}
|
||||
|
||||
public string OperatingSys
|
||||
{
|
||||
get { return _operatingSys; }
|
||||
}
|
||||
|
||||
internal HInfoRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
_cpuType = base.ParseText(ref ms);
|
||||
_operatingSys = base.ParseText(ref ms);
|
||||
_answer = "CPU: " + _cpuType + ", OS: " + _operatingSys;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
58
MailServer/DNSClient/Records/IDnsRecord.cs
Normal file
58
MailServer/DNSClient/Records/IDnsRecord.cs
Normal file
@ -0,0 +1,58 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public interface IDnsRecord
|
||||
{
|
||||
RecordHeader DnsHeader { get; }
|
||||
string Answer { get; }
|
||||
//short DataLength { get; }
|
||||
string ErrorMsg { get; }
|
||||
//string Name { get; }
|
||||
//NsClass NsClass { get; }
|
||||
//NsType NsType { get; }
|
||||
//int TimeToLive { get; }
|
||||
//void ParseRecordHeader(ref MemoryStream ms);
|
||||
void ParseRecord(ref MemoryStream ms);
|
||||
string ToString();
|
||||
|
||||
byte[] GetMessageBytes();
|
||||
}
|
||||
}
|
66
MailServer/DNSClient/Records/IsdnRecord.cs
Normal file
66
MailServer/DNSClient/Records/IsdnRecord.cs
Normal file
@ -0,0 +1,66 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class IsdnRecord : DnsRecordBase
|
||||
{
|
||||
private string _address;
|
||||
private string _subAddress;
|
||||
|
||||
public string Address
|
||||
{
|
||||
get { return _address; }
|
||||
}
|
||||
|
||||
public string SubAddress
|
||||
{
|
||||
get { return _subAddress; }
|
||||
}
|
||||
|
||||
internal IsdnRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
_address = base.ParseText(ref ms);
|
||||
_subAddress = base.ParseText(ref ms);
|
||||
_answer = "ISDN Address: " + _address + ", SubAddress: " + _subAddress;
|
||||
}
|
||||
}
|
||||
}
|
194
MailServer/DNSClient/Records/LocRecord.cs
Normal file
194
MailServer/DNSClient/Records/LocRecord.cs
Normal file
@ -0,0 +1,194 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class LocRecord : DnsRecordBase
|
||||
{
|
||||
// For LOC
|
||||
#region Fields
|
||||
private byte _version;
|
||||
private byte _size;
|
||||
private byte _horPrecision;
|
||||
private byte _vertPrecision;
|
||||
private uint _latitude;
|
||||
private uint _longitude;
|
||||
private uint _altitude;
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
public byte Version
|
||||
{
|
||||
get { return _version; }
|
||||
}
|
||||
|
||||
public byte Size
|
||||
{
|
||||
get { return _size; }
|
||||
}
|
||||
|
||||
public byte HorPrecision
|
||||
{
|
||||
get { return _horPrecision; }
|
||||
}
|
||||
|
||||
public byte VertPrecision
|
||||
{
|
||||
get { return _vertPrecision; }
|
||||
}
|
||||
|
||||
public uint Latitude
|
||||
{
|
||||
get { return _latitude; }
|
||||
}
|
||||
|
||||
public uint Longitude
|
||||
{
|
||||
get { return _longitude; }
|
||||
}
|
||||
|
||||
public uint Altitude
|
||||
{
|
||||
get { return _altitude; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
private char[] _latDirection = new char[2] {'N', 'S'};
|
||||
private char[] _longDirection = new char[2] {'E', 'W'};
|
||||
|
||||
internal LocRecord(RecordHeader dnsHeader) : base(dnsHeader) {}
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
byte[] latitude = new Byte[4];
|
||||
byte[] longitude = new Byte[4];
|
||||
byte[] altitude = new Byte[4];
|
||||
|
||||
_version = (byte)ms.ReadByte();
|
||||
_size = (byte)ms.ReadByte();
|
||||
_horPrecision = (byte)ms.ReadByte();
|
||||
_vertPrecision = (byte)ms.ReadByte();
|
||||
|
||||
ms.Read(latitude,0,latitude.Length);
|
||||
// _latitude = Tools.ByteToUInt(latitude);
|
||||
_latitude = (uint)IPAddress.NetworkToHostOrder((int)BitConverter.ToUInt32(latitude, 0));
|
||||
|
||||
ms.Read(longitude,0,longitude.Length);
|
||||
// _longitude = Tools.ByteToUInt(longitude);
|
||||
_longitude = (uint)IPAddress.NetworkToHostOrder((int)BitConverter.ToUInt32(longitude, 0));
|
||||
|
||||
|
||||
ms.Read(altitude,0,altitude.Length);
|
||||
// _altitude = Tools.ByteToUInt(altitude);
|
||||
_altitude = (uint)IPAddress.NetworkToHostOrder((int)BitConverter.ToUInt32(altitude, 0));
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append("Version: ");
|
||||
sb.Append(_version);
|
||||
sb.Append("\r\n");
|
||||
|
||||
sb.Append("Size: ");
|
||||
sb.Append(CalcSize(_size));
|
||||
sb.Append(" m\r\n");
|
||||
|
||||
sb.Append("Horizontal Precision: ");
|
||||
sb.Append(CalcSize(_horPrecision));
|
||||
sb.Append(" m\r\n");
|
||||
|
||||
sb.Append("Vertical Precision: ");
|
||||
sb.Append(CalcSize(_vertPrecision));
|
||||
sb.Append(" m\r\n");
|
||||
|
||||
sb.Append("Latitude: ");
|
||||
sb.Append(CalcLoc(_latitude, _latDirection));
|
||||
sb.Append("\r\n");
|
||||
|
||||
sb.Append("Longitude: ");
|
||||
sb.Append(CalcLoc(_longitude, _longDirection));
|
||||
sb.Append("\r\n");
|
||||
|
||||
sb.Append("Altitude: ");
|
||||
sb.Append((_altitude - 10000000) / 100.0);
|
||||
sb.Append(" m\r\n");
|
||||
|
||||
_answer = sb.ToString();
|
||||
}
|
||||
|
||||
private string CalcLoc(uint angle, char[] nsew)
|
||||
{
|
||||
char direction;
|
||||
if (angle < 0x80000000)
|
||||
{
|
||||
angle = 0x80000000 - angle;
|
||||
direction = nsew[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
angle = angle - 0x80000000;
|
||||
direction = nsew[0];
|
||||
}
|
||||
|
||||
uint tsecs = angle % 1000;
|
||||
angle = angle / 1000;
|
||||
uint secs = angle % 60;
|
||||
angle = angle / 60;
|
||||
uint minutes = angle % 60;
|
||||
uint degrees = angle / 60;
|
||||
|
||||
return degrees + " deg, " + minutes + " min " + secs+ "." + tsecs + " sec " + direction;
|
||||
}
|
||||
|
||||
// return size in meters
|
||||
private double CalcSize(byte val)
|
||||
{
|
||||
double size;
|
||||
int exponent;
|
||||
|
||||
size = (val & 0xF0) >> 4;
|
||||
exponent = (val & 0x0F);
|
||||
while (exponent != 0)
|
||||
{
|
||||
size *= 10;
|
||||
exponent--;
|
||||
}
|
||||
return size / 100;
|
||||
}
|
||||
}
|
||||
}
|
66
MailServer/DNSClient/Records/MInfoRecord.cs
Normal file
66
MailServer/DNSClient/Records/MInfoRecord.cs
Normal file
@ -0,0 +1,66 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class MInfoRecord : DnsRecordBase
|
||||
{
|
||||
private string _responsibleMb;
|
||||
private string _errorMb;
|
||||
|
||||
public string ResponsibleMb
|
||||
{
|
||||
get { return _responsibleMb; }
|
||||
}
|
||||
|
||||
public string ErrorMb
|
||||
{
|
||||
get { return _errorMb; }
|
||||
}
|
||||
|
||||
internal MInfoRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
_responsibleMb = DnsRecordBase.ParseName(ref ms);
|
||||
_errorMb = DnsRecordBase.ParseName(ref ms);
|
||||
_answer = "Responsible MailBox: " + _responsibleMb + ", Error MailBox: " + _errorMb;
|
||||
}
|
||||
}
|
||||
}
|
52
MailServer/DNSClient/Records/MbRecord.cs
Normal file
52
MailServer/DNSClient/Records/MbRecord.cs
Normal file
@ -0,0 +1,52 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class MbRecord : DnsRecordBase
|
||||
{
|
||||
internal MbRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
//public override void ParseRecord(ref MemoryStream ms)
|
||||
//{
|
||||
// _answer = BaseDnsRecord.ParseName(ref ms);
|
||||
//}
|
||||
}
|
||||
|
||||
}
|
51
MailServer/DNSClient/Records/MgRecord.cs
Normal file
51
MailServer/DNSClient/Records/MgRecord.cs
Normal file
@ -0,0 +1,51 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class MgRecord : DnsRecordBase
|
||||
{
|
||||
internal MgRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
//public override void ParseRecord(ref MemoryStream ms)
|
||||
//{
|
||||
// _answer = BaseDnsRecord.ParseName(ref ms);
|
||||
//}
|
||||
}
|
||||
}
|
51
MailServer/DNSClient/Records/MrRecord.cs
Normal file
51
MailServer/DNSClient/Records/MrRecord.cs
Normal file
@ -0,0 +1,51 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class MrRecord : DnsRecordBase
|
||||
{
|
||||
internal MrRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
//public override void ParseRecord(ref MemoryStream ms)
|
||||
//{
|
||||
// _answer = BaseDnsRecord.ParseName(ref ms);
|
||||
//}
|
||||
}
|
||||
}
|
75
MailServer/DNSClient/Records/MxRecord.cs
Normal file
75
MailServer/DNSClient/Records/MxRecord.cs
Normal file
@ -0,0 +1,75 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class MxRecord : DnsRecordBase
|
||||
{
|
||||
// For MX
|
||||
private short _preference;
|
||||
private string _mailExchange;
|
||||
|
||||
public short Preference
|
||||
{
|
||||
get { return _preference; }
|
||||
}
|
||||
|
||||
public string MailExchange
|
||||
{
|
||||
get { return _mailExchange; }
|
||||
}
|
||||
|
||||
internal MxRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
// Preference is a function of MX records
|
||||
byte[] nsPreference = new byte[2];
|
||||
ms.Read(nsPreference, 0, 2);
|
||||
//_preference = (short)Tools.ByteToUInt(nsPreference);
|
||||
// TODO: Should this be a UShort instead of a short?
|
||||
_preference = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsPreference, 0));
|
||||
|
||||
// Parse Name
|
||||
_mailExchange = DnsRecordBase.ParseName(ref ms);
|
||||
_answer = "MX Preference: " + _preference + ", Mail Exchanger: " + _mailExchange;
|
||||
}
|
||||
}
|
||||
}
|
51
MailServer/DNSClient/Records/NsRecord.cs
Normal file
51
MailServer/DNSClient/Records/NsRecord.cs
Normal file
@ -0,0 +1,51 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class NsRecord : DnsRecordBase
|
||||
{
|
||||
internal NsRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
//public override void ParseRecord(ref MemoryStream ms)
|
||||
//{
|
||||
// _answer = BaseDnsRecord.ParseName(ref ms);
|
||||
//}
|
||||
}
|
||||
}
|
51
MailServer/DNSClient/Records/PtrRecord.cs
Normal file
51
MailServer/DNSClient/Records/PtrRecord.cs
Normal file
@ -0,0 +1,51 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class PtrRecord : DnsRecordBase
|
||||
{
|
||||
internal PtrRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
//public override void ParseRecord(ref MemoryStream ms)
|
||||
//{
|
||||
// _answer = BaseDnsRecord.ParseName(ref ms);
|
||||
//}
|
||||
}
|
||||
}
|
191
MailServer/DNSClient/Records/RecordFactory.cs
Normal file
191
MailServer/DNSClient/Records/RecordFactory.cs
Normal file
@ -0,0 +1,191 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
using DnDns.Enums;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
class RecordFactory
|
||||
{
|
||||
public static IDnsRecord Create(ref MemoryStream ms)
|
||||
{
|
||||
IDnsRecord dnsRecord;
|
||||
// Have to start out with an unknown record, since we have to parse the entire
|
||||
// header before we can determine the type of DNS record it is.
|
||||
// TODO: Consider other options.
|
||||
|
||||
// start as an unknown type, then create a known type, parse the response
|
||||
// and return the object.
|
||||
//DnsRecordBase dr = new DnsUnknownRecord();
|
||||
//dr.ParseRecordHeader(ref ms);
|
||||
|
||||
RecordHeader dnsHeader = new RecordHeader();
|
||||
dnsHeader.ParseRecordHeader(ref ms);
|
||||
|
||||
switch (dnsHeader.NsType)
|
||||
{
|
||||
case NsType.A:
|
||||
{
|
||||
dnsRecord = new ARecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.AAAA:
|
||||
{
|
||||
dnsRecord = new AaaaRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.MX:
|
||||
{
|
||||
dnsRecord = new MxRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.RP:
|
||||
{
|
||||
dnsRecord = new RpRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.MR:
|
||||
{
|
||||
dnsRecord = new MrRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.MB:
|
||||
{
|
||||
dnsRecord = new MbRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.MG:
|
||||
{
|
||||
dnsRecord = new MgRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.NS:
|
||||
{
|
||||
dnsRecord = new NsRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.CNAME:
|
||||
{
|
||||
dnsRecord = new CNameRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.PTR:
|
||||
{
|
||||
dnsRecord = new PtrRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.HINFO:
|
||||
{
|
||||
dnsRecord = new HInfoRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.MINFO:
|
||||
{
|
||||
dnsRecord = new MInfoRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.X25:
|
||||
{
|
||||
dnsRecord = new X25Record(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.TXT:
|
||||
{
|
||||
dnsRecord = new TxtRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.LOC:
|
||||
{
|
||||
dnsRecord = new LocRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.SOA:
|
||||
{
|
||||
dnsRecord = new SoaRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.SRV:
|
||||
{
|
||||
dnsRecord = new SrvRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.AFSDB:
|
||||
{
|
||||
dnsRecord = new AfsdbRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.ATMA:
|
||||
{
|
||||
dnsRecord = new AtmaRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.ISDN:
|
||||
{
|
||||
dnsRecord = new IsdnRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.RT:
|
||||
{
|
||||
dnsRecord = new RtRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.WKS:
|
||||
{
|
||||
dnsRecord = new WksRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
case NsType.TSIG:
|
||||
{
|
||||
dnsRecord = new TSigRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
// Unknown type. parse and return the DnsUnknownRecord
|
||||
dnsRecord = new UnknownRecord(dnsHeader);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//dnsRecord.ParseRecordHeader(ref ms);
|
||||
dnsRecord.ParseRecord(ref ms);
|
||||
return dnsRecord;
|
||||
}
|
||||
}
|
||||
}
|
242
MailServer/DNSClient/Records/RecordHeader.cs
Normal file
242
MailServer/DNSClient/Records/RecordHeader.cs
Normal file
@ -0,0 +1,242 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
using DnDns.Enums;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
/// <summary>
|
||||
/// The DnsRecordHeader class contains fields, properties and
|
||||
/// parsing cababilities within the DNS Record except the the
|
||||
/// RDATA. The Name, Type, Class, TTL, and RDLength.
|
||||
///
|
||||
/// This class is used in the DnsRecordFactory to instantiate
|
||||
/// concrete DnsRecord Classes.
|
||||
///
|
||||
/// RFC 1035
|
||||
///
|
||||
/// 3.2.1. Format
|
||||
///
|
||||
/// All RRs have the same top level format shown below:
|
||||
///
|
||||
/// 1 1 1 1 1 1
|
||||
/// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | |
|
||||
/// / /
|
||||
/// / NAME /
|
||||
/// | |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | TYPE |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | CLASS |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | TTL |
|
||||
/// | |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||
/// | RDLENGTH |
|
||||
/// +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
|
||||
///
|
||||
/// where:
|
||||
///
|
||||
/// NAME an owner name, i.e., the name of the node to which this
|
||||
/// resource record pertains.
|
||||
///
|
||||
/// TYPE two octets containing one of the RR TYPE codes.
|
||||
///
|
||||
/// CLASS two octets containing one of the RR CLASS codes.
|
||||
///
|
||||
/// TTL a 32 bit signed integer that specifies the time interval
|
||||
/// that the resource record may be cached before the source
|
||||
/// of the information should again be consulted. Zero
|
||||
/// values are interpreted to mean that the RR can only be
|
||||
/// used for the transaction in progress, and should not be
|
||||
/// cached. For example, SOA records are always distributed
|
||||
/// with a zero TTL to prohibit caching. Zero values can
|
||||
/// also be used for extremely volatile data.
|
||||
///
|
||||
/// RDLENGTH an unsigned 16 bit integer that specifies the length in
|
||||
/// octets of the RDATA field.
|
||||
///
|
||||
/// </summary>
|
||||
public class RecordHeader
|
||||
{
|
||||
#region Fields
|
||||
// NAME an owner name, i.e., the name of the node to which this
|
||||
// resource record pertains.
|
||||
private string _name;
|
||||
// TYPE two octets containing one of the RR TYPE codes.
|
||||
private NsType _nsType;
|
||||
// CLASS - two octets containing one of the RR CLASS codes.
|
||||
private NsClass _nsClass;
|
||||
// TTL - a 32 bit signed integer that specifies the time interval
|
||||
// that the resource record may be cached before the source
|
||||
// of the information should again be consulted. Zero
|
||||
// values are interpreted to mean that the RR can only be
|
||||
// used for the transaction in progress, and should not be
|
||||
// cached. For example, SOA records are always distributed
|
||||
// with a zero TTL to prohibit caching. Zero values can
|
||||
/// also be used for extremely volatile data.
|
||||
private int _timeToLive;
|
||||
// RDLENGTH - an unsigned 16 bit integer that specifies the length in
|
||||
// octets of the RDATA field.
|
||||
private short _dataLength;
|
||||
|
||||
/// <summary>
|
||||
/// Initalise the <see cref="RecordHeader"/>
|
||||
/// </summary>
|
||||
/// <param name="name">The header name</param>
|
||||
/// <param name="nsType">The resource type</param>
|
||||
/// <param name="nsClass">The class type</param>
|
||||
/// <param name="timeToLive">The time to live</param>
|
||||
public RecordHeader(string name, NsType nsType, NsClass nsClass, int timeToLive)
|
||||
{
|
||||
_name = name;
|
||||
_nsType = nsType;
|
||||
_nsClass = nsClass;
|
||||
_timeToLive = timeToLive;
|
||||
}
|
||||
|
||||
public RecordHeader()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
/// <summary>
|
||||
/// NAME - an owner name, i.e., the name of the node to which this
|
||||
/// resource record pertains.
|
||||
/// </summary>
|
||||
public string Name
|
||||
{
|
||||
get { return _name; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TYPE two octets containing one of the RR TYPE codes.
|
||||
/// </summary>
|
||||
public NsType NsType
|
||||
{
|
||||
get { return _nsType; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// CLASS - two octets containing one of the RR CLASS codes.
|
||||
/// </summary>
|
||||
public NsClass NsClass
|
||||
{
|
||||
get { return _nsClass; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TTL - a 32 bit signed integer that specifies the time interval
|
||||
/// that the resource record may be cached before the source
|
||||
/// of the information should again be consulted. Zero
|
||||
/// values are interpreted to mean that the RR can only be
|
||||
/// used for the transaction in progress, and should not be
|
||||
/// cached. For example, SOA records are always distributed
|
||||
/// with a zero TTL to prohibit caching. Zero values can
|
||||
/// also be used for extremely volatile data.
|
||||
/// </summary>
|
||||
public int TimeToLive
|
||||
{
|
||||
get { return _timeToLive; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// RDLENGTH - an unsigned 16 bit integer that specifies the length in
|
||||
/// octets of the RDATA field.
|
||||
/// </summary>
|
||||
public short DataLength
|
||||
{
|
||||
get { return _dataLength; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="ms"></param>
|
||||
public void ParseRecordHeader(ref MemoryStream ms)
|
||||
{
|
||||
byte[] nsType = new byte[2];
|
||||
byte[] nsClass = new byte[2];
|
||||
byte[] nsTTL = new byte[4];
|
||||
byte[] nsDataLength = new byte[2];
|
||||
|
||||
// Read the name
|
||||
_name = DnsRecordBase.ParseName(ref ms);
|
||||
|
||||
// Read the data header
|
||||
ms.Read(nsType, 0, 2);
|
||||
ms.Read(nsClass, 0, 2);
|
||||
ms.Read(nsTTL, 0, 4);
|
||||
ms.Read(nsDataLength, 0, 2);
|
||||
_nsType = (NsType)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsType, 0));
|
||||
_nsClass = (NsClass)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsClass, 0));
|
||||
|
||||
_timeToLive = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(nsTTL, 0));
|
||||
_dataLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsDataLength, 0));
|
||||
}
|
||||
|
||||
internal byte[] GetMessageBytes()
|
||||
{
|
||||
MemoryStream memoryStream = new MemoryStream();
|
||||
|
||||
byte[] data = DnsHelpers.CanonicaliseDnsName(_name, false);
|
||||
memoryStream.Write(data,0,data.Length);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder((ushort)_nsType) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder((ushort)_nsClass) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
data = BitConverter.GetBytes((uint)(IPAddress.HostToNetworkOrder((ushort)_timeToLive) >> 32));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder((ushort)_dataLength) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
return memoryStream.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
68
MailServer/DNSClient/Records/RpRecord.cs
Normal file
68
MailServer/DNSClient/Records/RpRecord.cs
Normal file
@ -0,0 +1,68 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class RpRecord : DnsRecordBase
|
||||
{
|
||||
// For RP
|
||||
private string _name;
|
||||
private string _textLocation;
|
||||
|
||||
public string RpName
|
||||
{
|
||||
get { return _name; }
|
||||
}
|
||||
|
||||
public string TextLocation
|
||||
{
|
||||
get { return _textLocation; }
|
||||
}
|
||||
|
||||
internal RpRecord(RecordHeader dnsHeader) : base(dnsHeader) {}
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
_name = DnsRecordBase.ParseName(ref ms);
|
||||
_textLocation = DnsRecordBase.ParseName(ref ms);
|
||||
_answer = _name + ", " + _textLocation;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
71
MailServer/DNSClient/Records/RtRecord.cs
Normal file
71
MailServer/DNSClient/Records/RtRecord.cs
Normal file
@ -0,0 +1,71 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class RtRecord : DnsRecordBase
|
||||
{
|
||||
private ushort _preference;
|
||||
private string _intermediateHost;
|
||||
|
||||
public ushort Preference
|
||||
{
|
||||
get { return _preference; }
|
||||
}
|
||||
|
||||
public string IntermediateHost
|
||||
{
|
||||
get { return _intermediateHost; }
|
||||
}
|
||||
|
||||
internal RtRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
byte[] preference = new byte[2];
|
||||
ms.Read(preference, 0, 2);
|
||||
//_preference = (ushort)Tools.ByteToUInt(preference);
|
||||
_preference = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(preference, 0));
|
||||
_intermediateHost = DnsRecordBase.ParseName(ref ms);
|
||||
_answer = "Preference: " + _preference + ", Intermediate Host: " + _intermediateHost;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
160
MailServer/DNSClient/Records/SoaRecord.cs
Normal file
160
MailServer/DNSClient/Records/SoaRecord.cs
Normal file
@ -0,0 +1,160 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class SoaRecord : DnsRecordBase
|
||||
{
|
||||
// For SOA
|
||||
#region fields
|
||||
private string _primaryNameServer;
|
||||
private string _responsiblePerson;
|
||||
private uint _serial;
|
||||
private uint _refreshInterval;
|
||||
private uint _retryInterval;
|
||||
private uint _expirationLimit;
|
||||
// RFC 1034: TTL - only positive values of a signed 32 bit number.
|
||||
private int _minimumTimeToLive;
|
||||
#endregion
|
||||
|
||||
#region properties
|
||||
public string PrimaryNameServer
|
||||
{
|
||||
get { return _primaryNameServer; }
|
||||
}
|
||||
|
||||
public string ResponsiblePerson
|
||||
{
|
||||
get { return _responsiblePerson; }
|
||||
}
|
||||
|
||||
public uint Serial
|
||||
{
|
||||
get { return _serial; }
|
||||
}
|
||||
|
||||
public uint RefreshInterval
|
||||
{
|
||||
get { return _refreshInterval; }
|
||||
}
|
||||
|
||||
public uint RetryInterval
|
||||
{
|
||||
get { return _retryInterval; }
|
||||
}
|
||||
|
||||
public uint ExpirationLimit
|
||||
{
|
||||
get { return _expirationLimit; }
|
||||
}
|
||||
|
||||
public int MinimumTimeToLive
|
||||
{
|
||||
get { return _minimumTimeToLive; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
internal SoaRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
// Parse Name
|
||||
_primaryNameServer = DnsRecordBase.ParseName(ref ms);
|
||||
sb.Append("Primary NameServer: ");
|
||||
sb.Append(_primaryNameServer);
|
||||
sb.Append("\r\n");
|
||||
|
||||
// Parse Responsible Persons Mailbox (Parse Name)
|
||||
_responsiblePerson = DnsRecordBase.ParseName(ref ms);
|
||||
sb.Append("Responsible Person: ");
|
||||
sb.Append(_responsiblePerson);
|
||||
sb.Append("\r\n");
|
||||
|
||||
byte[] serial = new Byte[4];
|
||||
byte[] refreshInterval = new Byte[4];
|
||||
byte[] retryInterval = new Byte[4];
|
||||
byte[] expirationLimit = new Byte[4];
|
||||
byte[] minTTL = new Byte[4];
|
||||
|
||||
// Parse Serial (4 bytes)
|
||||
ms.Read(serial, 0, 4);
|
||||
//_serial = Tools.ByteToUInt(serial);
|
||||
_serial = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(serial, 0));
|
||||
sb.Append("Serial: ");
|
||||
sb.Append(_serial);
|
||||
sb.Append("\r\n");
|
||||
|
||||
// Parse Refresh Interval (4 bytes)
|
||||
ms.Read(refreshInterval, 0, 4);
|
||||
// _refreshInterval = Tools.ByteToUInt(refreshInterval);
|
||||
_refreshInterval = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(refreshInterval, 0));
|
||||
sb.Append("Refresh Interval: ");
|
||||
sb.Append(_refreshInterval);
|
||||
sb.Append("\r\n");
|
||||
|
||||
// Parse Retry Interval (4 bytes)
|
||||
ms.Read(retryInterval, 0, 4);
|
||||
//_retryInterval = Tools.ByteToUInt(retryInterval);
|
||||
_retryInterval = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(retryInterval, 0));
|
||||
sb.Append("Retry Interval: ");
|
||||
sb.Append(_retryInterval);
|
||||
sb.Append("\r\n");
|
||||
|
||||
// Parse Expiration limit (4 bytes)
|
||||
ms.Read(expirationLimit, 0, 4);
|
||||
// _expirationLimit = Tools.ByteToUInt(expirationLimit);
|
||||
_expirationLimit = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(expirationLimit, 0));
|
||||
sb.Append("Expire: ");
|
||||
sb.Append(_expirationLimit);
|
||||
sb.Append("\r\n");
|
||||
|
||||
// Parse Min TTL (4 bytes)
|
||||
ms.Read(minTTL, 0, 4);
|
||||
// _minTTL = Tools.ByteToUInt(minTTL);
|
||||
_minimumTimeToLive = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(minTTL, 0));
|
||||
sb.Append("TTL: ");
|
||||
sb.Append(_minimumTimeToLive);
|
||||
sb.Append("\r\n");
|
||||
|
||||
_answer = sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
95
MailServer/DNSClient/Records/SrvRecord.cs
Normal file
95
MailServer/DNSClient/Records/SrvRecord.cs
Normal file
@ -0,0 +1,95 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class SrvRecord : DnsRecordBase
|
||||
{
|
||||
// For SRV
|
||||
private ushort _priority;
|
||||
private ushort _weight;
|
||||
private ushort _port;
|
||||
private string _hostName;
|
||||
|
||||
public ushort Priority
|
||||
{
|
||||
get { return _priority; }
|
||||
}
|
||||
public ushort Weight
|
||||
{
|
||||
get { return _weight; }
|
||||
}
|
||||
|
||||
public ushort Port
|
||||
{
|
||||
get { return _port; }
|
||||
}
|
||||
|
||||
public string HostName
|
||||
{
|
||||
get { return _hostName; }
|
||||
}
|
||||
|
||||
internal SrvRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
byte[] priority = new byte[2];
|
||||
ms.Read(priority, 0, 2);
|
||||
//_priority = (ushort)Tools.ByteToUInt(Priority);
|
||||
_priority = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(priority, 0));
|
||||
|
||||
byte[] weight = new byte[2];
|
||||
ms.Read(weight, 0, 2);
|
||||
// _weight = (ushort)Tools.ByteToUInt(Weight);
|
||||
_weight = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(weight, 0));
|
||||
|
||||
byte[] port = new byte[2];
|
||||
ms.Read(port, 0, 2);
|
||||
//_port = (ushort)Tools.ByteToUInt(port);
|
||||
_port = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(port, 0));
|
||||
|
||||
_hostName = DnsRecordBase.ParseName(ref ms);
|
||||
|
||||
_answer = "Service Location: \r\nPriority: " + _priority + "\r\nWeight: " +
|
||||
_weight + "\r\nPort: " + _port + "\r\nHostName: " + _hostName + "\r\n";
|
||||
}
|
||||
}
|
||||
}
|
235
MailServer/DNSClient/Records/TSigRecord.cs
Normal file
235
MailServer/DNSClient/Records/TSigRecord.cs
Normal file
@ -0,0 +1,235 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using DnDns.Enums;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
/// <summary>
|
||||
/// Implementation of a TSIG record structure as per RFC 2845
|
||||
/// </summary>
|
||||
public sealed class TSigRecord : DnsRecordBase
|
||||
{
|
||||
private string _algorithmName;
|
||||
private RCode _error;
|
||||
private ushort _fudge;
|
||||
private ushort _originalId;
|
||||
private byte[] _otherData;
|
||||
private byte[] _mac;
|
||||
private DateTime _timeSigned;
|
||||
|
||||
public string AlgorithmName
|
||||
{
|
||||
get { return _algorithmName; }
|
||||
}
|
||||
|
||||
public RCode Error
|
||||
{
|
||||
get { return _error; }
|
||||
}
|
||||
|
||||
public ushort Fudge
|
||||
{
|
||||
get { return _fudge; }
|
||||
}
|
||||
|
||||
public ushort OriginalID
|
||||
{
|
||||
get { return _originalId; }
|
||||
}
|
||||
|
||||
public byte[] OtherData
|
||||
{
|
||||
get { return _otherData; }
|
||||
}
|
||||
|
||||
public byte[] Mac
|
||||
{
|
||||
get { return _mac; }
|
||||
}
|
||||
|
||||
public DateTime TimeSigned
|
||||
{
|
||||
get { return _timeSigned; }
|
||||
}
|
||||
|
||||
public TSigRecord(RecordHeader dnsHeader) : base(dnsHeader)
|
||||
{
|
||||
}
|
||||
|
||||
public TSigRecord(string name, string algorithmName, RCode error, ushort fudge, ushort originalId, byte[] otherData, byte[] mac, DateTime timeSigned)
|
||||
{
|
||||
DnsHeader = new RecordHeader(name, NsType.TSIG, NsClass.ANY, 0);
|
||||
|
||||
_algorithmName = algorithmName;
|
||||
_error = error;
|
||||
_fudge = fudge;
|
||||
_originalId = originalId;
|
||||
_otherData = otherData;
|
||||
_mac = mac;
|
||||
_timeSigned = timeSigned;
|
||||
|
||||
if(otherData == null)
|
||||
{
|
||||
_otherData = new byte[]{};
|
||||
}
|
||||
}
|
||||
|
||||
public override void ParseRecord(ref MemoryStream memoryStream)
|
||||
{
|
||||
Byte[] dataUInt16 = new byte[2];
|
||||
Byte[] dataUInt32 = new byte[4];
|
||||
|
||||
_algorithmName = ParseName(ref memoryStream);
|
||||
|
||||
memoryStream.Read(dataUInt16, 0, dataUInt16.Length);
|
||||
long timeHigh = (ushort) IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(dataUInt16, 0));
|
||||
memoryStream.Read(dataUInt32, 0, dataUInt32.Length);
|
||||
long timeLow = (uint) IPAddress.NetworkToHostOrder((int)BitConverter.ToUInt32(dataUInt32, 0));
|
||||
_timeSigned = DnsHelpers.ConvertFromDnsTime(timeLow, timeHigh);
|
||||
|
||||
memoryStream.Read(dataUInt16, 0, dataUInt16.Length);
|
||||
_fudge = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(dataUInt16, 0));
|
||||
|
||||
memoryStream.Read(dataUInt16, 0, dataUInt16.Length);
|
||||
Int32 macLen = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(dataUInt16, 0));
|
||||
_mac = new byte[macLen];
|
||||
memoryStream.Read(_mac, 0, macLen);
|
||||
|
||||
memoryStream.Read(dataUInt16, 0, dataUInt16.Length);
|
||||
_originalId = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(dataUInt16, 0));
|
||||
|
||||
memoryStream.Read(dataUInt16, 0, dataUInt16.Length);
|
||||
_error = (RCode)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(dataUInt16, 0));
|
||||
|
||||
memoryStream.Read(dataUInt16, 0, dataUInt16.Length);
|
||||
Int32 otherLen = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(dataUInt16, 0));
|
||||
|
||||
if(otherLen > 0)
|
||||
{
|
||||
_otherData = new byte[otherLen];
|
||||
memoryStream.Read(_otherData, 0, otherLen);
|
||||
}
|
||||
else
|
||||
{
|
||||
_otherData = null;
|
||||
}
|
||||
|
||||
_answer = ToString();
|
||||
|
||||
}
|
||||
|
||||
public override byte[] GetMessageBytes()
|
||||
{
|
||||
MemoryStream memoryStream = new MemoryStream();
|
||||
|
||||
byte[] data = DnsHeader.GetMessageBytes();
|
||||
memoryStream.Write(data,0,data.Length);
|
||||
|
||||
long rLengthPosition = memoryStream.Position;
|
||||
|
||||
data = DnsHelpers.CanonicaliseDnsName(_algorithmName, false);
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
int timeHigh;
|
||||
long timeLow;
|
||||
DnsHelpers.ConvertToDnsTime(_timeSigned.ToUniversalTime(), out timeHigh, out timeLow);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder((ushort)timeHigh) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
data = BitConverter.GetBytes((uint)(IPAddress.HostToNetworkOrder((uint)timeLow) >> 32));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder(_fudge) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder(_mac.Length) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
memoryStream.Write(_mac, 0, _mac.Length);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder(_originalId) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder((ushort)_error) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder((ushort)_otherData.Length) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
if(_otherData.Length != 0)
|
||||
{
|
||||
memoryStream.Write(_otherData, 0, _otherData.Length);
|
||||
}
|
||||
|
||||
// Add the rdata lenght
|
||||
long rlength = memoryStream.Position - rLengthPosition;
|
||||
|
||||
memoryStream.Seek(rLengthPosition - 2, SeekOrigin.Begin);
|
||||
|
||||
data = BitConverter.GetBytes((ushort)(IPAddress.HostToNetworkOrder((ushort)rlength) >> 16));
|
||||
memoryStream.Write(data, 0, data.Length);
|
||||
|
||||
return memoryStream.ToArray();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append(_algorithmName);
|
||||
sb.Append(" ");
|
||||
sb.Append(_timeSigned);
|
||||
sb.Append(" ");
|
||||
sb.Append(_fudge);
|
||||
sb.Append(" ");
|
||||
sb.Append(_mac.Length);
|
||||
sb.Append(" ");
|
||||
sb.Append(Convert.ToBase64String(Mac));
|
||||
sb.Append(" ");
|
||||
sb.Append(_error);
|
||||
sb.Append(" ");
|
||||
|
||||
if (_otherData == null)
|
||||
{
|
||||
sb.Append(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append(_otherData.Length);
|
||||
sb.Append(" ");
|
||||
|
||||
if (_error == RCode.BADTIME)
|
||||
{
|
||||
if (_otherData.Length != 6)
|
||||
{
|
||||
sb.Append("<invalid BADTIME other data>");
|
||||
}
|
||||
else
|
||||
{
|
||||
long time = ((long)(_otherData[0] & 0xFF) << 40) +
|
||||
((long)(_otherData[1] & 0xFF) << 32) +
|
||||
((_otherData[2] & 0xFF) << 24) +
|
||||
((_otherData[3] & 0xFF) << 16) +
|
||||
((_otherData[4] & 0xFF) << 8) +
|
||||
((_otherData[5] & 0xFF));
|
||||
|
||||
sb.Append("<server time: ");
|
||||
sb.Append(DnsHelpers.ConvertFromDnsTime(time));
|
||||
sb.Append(">");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append("<");
|
||||
sb.Append(Convert.ToBase64String(_otherData));
|
||||
sb.Append(">");
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
63
MailServer/DNSClient/Records/TxtRecord.cs
Normal file
63
MailServer/DNSClient/Records/TxtRecord.cs
Normal file
@ -0,0 +1,63 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public sealed class TxtRecord : DnsRecordBase
|
||||
{
|
||||
private string _text;
|
||||
|
||||
public string Text
|
||||
{
|
||||
get { return _text; }
|
||||
}
|
||||
|
||||
internal TxtRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
_text = base.ParseText(ref ms);
|
||||
_answer = "text: " + _text;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
69
MailServer/DNSClient/Records/UnknownRecord.cs
Normal file
69
MailServer/DNSClient/Records/UnknownRecord.cs
Normal file
@ -0,0 +1,69 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
class UnknownRecord : DnsRecordBase
|
||||
{
|
||||
public UnknownRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
// Type not implemented so we read it into a buffer and print out the data.
|
||||
StringBuilder sb = new StringBuilder(this.DnsHeader.DataLength);
|
||||
byte[] b = new byte[1];
|
||||
// Loop over data, if char is easily converted to ASCII, convert it.
|
||||
// Otherwise print a '.'
|
||||
for (int i = 0; i < this.DnsHeader.DataLength; i++)
|
||||
{
|
||||
ms.Read(b, 0, 1);
|
||||
if ((b[0] > 0x20) && (b[0] < 0x7e))
|
||||
{
|
||||
sb.Append(Encoding.ASCII.GetString(b));
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.Append('.');
|
||||
}
|
||||
}
|
||||
_answer = sb.ToString();
|
||||
_errorMsg = "Type " + this.DnsHeader.NsType + " not implemented.";
|
||||
}
|
||||
}
|
||||
}
|
115
MailServer/DNSClient/Records/WksRecord.cs
Normal file
115
MailServer/DNSClient/Records/WksRecord.cs
Normal file
@ -0,0 +1,115 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class WksRecord : DnsRecordBase
|
||||
{
|
||||
private ProtocolType _protocolType;
|
||||
private IPAddress _ipAddress;
|
||||
private short[] _ports;
|
||||
|
||||
public ProtocolType ProtocolType
|
||||
{
|
||||
get { return _protocolType; }
|
||||
set { _protocolType = value; }
|
||||
}
|
||||
|
||||
public IPAddress IpAddress
|
||||
{
|
||||
get { return _ipAddress; }
|
||||
set { _ipAddress = value; }
|
||||
}
|
||||
|
||||
public short[] Ports
|
||||
{
|
||||
get { return _ports; }
|
||||
set { _ports = value; }
|
||||
}
|
||||
|
||||
internal WksRecord(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
// Bit map is the data length minus the IpAddress (4 bytes) and the Protocol (1 byte), 5 bytes total.
|
||||
int bitMapLen = this.DnsHeader.DataLength - 4 - 1;
|
||||
byte[] ipAddr = new byte[4];
|
||||
byte[] BitMap = new byte[bitMapLen];
|
||||
|
||||
ms.Read(ipAddr, 0, 4);
|
||||
// _ipAddress = new IPAddress(Tools.ToUInt32(ipAddr, 0));
|
||||
_ipAddress = new IPAddress((uint)IPAddress.NetworkToHostOrder(BitConverter.ToUInt32(ipAddr, 0)));
|
||||
_protocolType = (ProtocolType)ms.ReadByte();
|
||||
ms.Read(BitMap, 0, BitMap.Length);
|
||||
_ports = GetKnownServices(BitMap);
|
||||
_answer = _protocolType + ": " + Tools.GetServByPort(_ports, _protocolType);
|
||||
}
|
||||
|
||||
private short[] GetKnownServices(byte[] BitMap)
|
||||
{
|
||||
short[] tempPortArr = new short[1024];
|
||||
int portCount = 0;
|
||||
// mask to isolate left most bit
|
||||
const byte mask = 0x80;
|
||||
// Iterate through each byte
|
||||
for (int i = 0; i < BitMap.Length; i++)
|
||||
{
|
||||
byte currentByte = BitMap[i];
|
||||
int count = 0;
|
||||
// iterate through each bit
|
||||
for (byte j = 0x07; j != 0xFF; j--)
|
||||
{
|
||||
int port = (((i * 8) + count++) + 1);
|
||||
currentByte = (byte)(currentByte << 1);
|
||||
// is the flag set?
|
||||
if ((mask & currentByte) == 0x80)
|
||||
{
|
||||
tempPortArr[portCount] = (short)port;
|
||||
portCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
short[] portArr = new short[portCount];
|
||||
Array.Copy(tempPortArr, 0, portArr, 0, portCount);
|
||||
return portArr;
|
||||
}
|
||||
}
|
||||
}
|
60
MailServer/DNSClient/Records/X25Record.cs
Normal file
60
MailServer/DNSClient/Records/X25Record.cs
Normal file
@ -0,0 +1,60 @@
|
||||
/**********************************************************************
|
||||
* Copyright (c) 2010, j. montgomery *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* Redistribution and use in source and binary forms, with or without *
|
||||
* modification, are permitted provided that the following conditions *
|
||||
* are met: *
|
||||
* *
|
||||
* + Redistributions of source code must retain the above copyright *
|
||||
* notice, this list of conditions and the following disclaimer. *
|
||||
* *
|
||||
* + Redistributions in binary form must reproduce the above copyright*
|
||||
* notice, this list of conditions and the following disclaimer *
|
||||
* in the documentation and/or other materials provided with the *
|
||||
* distribution. *
|
||||
* *
|
||||
* + Neither the name of j. montgomery's employer nor the names of *
|
||||
* its contributors may be used to endorse or promote products *
|
||||
* derived from this software without specific prior written *
|
||||
* permission. *
|
||||
* *
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS*
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS *
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE *
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,*
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR *
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,*
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) *
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED*
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||
**********************************************************************/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
namespace DnDns.Records
|
||||
{
|
||||
public sealed class X25Record : DnsRecordBase
|
||||
{
|
||||
private string _x25Address;
|
||||
|
||||
public string X25Address
|
||||
{
|
||||
get { return _x25Address; }
|
||||
}
|
||||
|
||||
internal X25Record(RecordHeader dnsHeader) : base(dnsHeader) { }
|
||||
|
||||
public override void ParseRecord(ref MemoryStream ms)
|
||||
{
|
||||
_x25Address = base.ParseText(ref ms);
|
||||
_answer = "X.25 X.121 Address: " + _x25Address;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user